Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> опять криптография 
:(
    Опции темы
YoD
Дата 4.1.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.11.2004

Репутация: нет
Всего: нет



помогите пожалуйста. Ниже приведён рабочий код процедур, осуществляющих шифровку файла симметрическим алгоритмом.

Код

   Shared Sub EncryptTextFile(ByVal SourceFile As String, ByVal DestFile As String, ByVal Pass As String)
       Dim RR As New System.Security.Cryptography.RijndaelManaged()
       RR.Key = CreateKeyFromPassword(Pass)
       Dim Transform As System.Security.Cryptography.ICryptoTransform = RR.CreateEncryptor
       Dim Fs As New System.IO.FileStream(DestFile, IO.FileMode.Create)
       Fs.Write(RR.IV, 0, RR.IV.Length)
       Dim CS As New System.Security.Cryptography.CryptoStream(Fs, Transform, Security.Cryptography.CryptoStreamMode.Write)
       Dim w As New IO.StreamWriter(CS)
       w.Write(ReadTextFileToVar(SourceFile))
       w.Flush()
       CS.FlushFinalBlock()
       w.Close()
   End Sub

       Shared Function ReadTextFileToVar(ByVal FName As String) As String
' сначала пытался прочитать файлом по-нормальному - через FileStream.ReadToEnd, но
' он почему-то не читал русский текст. Читал английский, пунктуацию, а русский не читал.
' Почему - не знаю.
       Dim Data As String
       FileOpen(13, FName, OpenMode.Input)
       While Not EOF(13)
           If Data <> "" Then Data &= vbNewLine
           Data &= LineInput(13)
       End While
       FileClose(13)
       Return Data
   End Function

Shared Sub DecryptTextFile(ByVal SourceFile As String, ByVal DestFile As String, ByVal Pass As String)
       On Error Resume Next
       Dim RR As New System.Security.Cryptography.RijndaelManaged()
       RR.Key = CreateKeyFromPassword(Pass)
       Dim Fs As New IO.FileStream(SourceFile, IO.FileMode.Open)
       Dim IV As Byte()
       ReDim IV(RR.IV.Length - 1)
       Fs.Read(IV, 0, IV.Length)
       RR.IV = IV
       Dim Transform As System.Security.Cryptography.ICryptoTransform = RR.CreateDecryptor
       Dim CS As New System.Security.Cryptography.CryptoStream(Fs, Transform, Security.Cryptography.CryptoStreamMode.Read)
       Dim strReader As New IO.StreamReader(CS)
       FileOpen(13, DestFile, OpenMode.Output)
       Print(13, strReader.ReadToEnd)
       FileClose(13)
   End Sub

Shared Function CreateKeyFromPassword(ByVal Pass As String) As Byte()
       Dim Salt(7) As Byte
       Dim Random As New System.Security.Cryptography.RNGCryptoServiceProvider()
       Random.GetBytes(Salt)
       Dim RR As New System.Security.Cryptography.RijndaelManaged()
       Dim PDB As New System.Security.Cryptography.PasswordDeriveBytes(Pass, Salt)
       Dim Key() As Byte
       Key = PDB.CryptDeriveKey("RC2", "SHA", 128, Salt)
       Return Key
   End Function


Но всё это добро работает только для текстовых файлов. Кто знает как, исправьте пожалуйста эти процедуры для шифрования\дешифрования двоичных файлов. Просто я жутко запутался во всех этих потоках и т.д.
PM MAIL ICQ   Вверх
[Last]Wizard
Дата 6.1.2005, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

Репутация: 2
Всего: 10



Можно так же, только вместо String используй массив Byte.
PM ICQ   Вверх
YoD
Дата 6.1.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.11.2004

Репутация: нет
Всего: нет



Код

   Shared Sub EncryptFile(ByVal SourceFile As String, ByVal DestFile As String, ByVal Pass As String)
       Dim RR As New System.Security.Cryptography.RijndaelManaged()
       RR.Key = CreateKeyFromPassword(Pass)
       Dim Transform As System.Security.Cryptography.ICryptoTransform = RR.CreateEncryptor
       Dim Fs As New System.IO.FileStream(DestFile, IO.FileMode.Create)
       Fs.Write(RR.IV, 0, RR.IV.Length)
       Dim CS As New System.Security.Cryptography.CryptoStream(Fs, Transform, Security.Cryptography.CryptoStreamMode.Write)
       Dim w As New IO.StreamWriter(CS)
       Dim i As Integer
       Dim Sf As New IO.FileStream(SourceFile, IO.FileMode.Open)
       For i = 1 To Sf.Length
           Sf.ReadByte()
           w.Write(Sf.ReadByte())
       Next
       w.Flush()
       CS.FlushFinalBlock()
       w.Close()
       Sf.Close()
   End Sub


Вот я переделал шифровку. А как теперь осуществить дешифровку? Просто я не знаю, как побайтно считывать из потока strReader, который я использовал в прошлой процедуре дешифровки (см. первый пост)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.