Страница: 1 |
Страница: 1 |
Вопрос: Помогите с шифрованием!
Добавлено: 15.01.13 01:54
Автор вопроса: ЛеШий
Помогите, пожалуйста, разобраться:
мне необходимо зашифровать текстовую строку; использую этот метод: http://www.cyberforum.ru/post818053.html
В первом случае, когда я записываю зашифрованный результат в текстовый файл, все работает без проблем. Во втором случае, когда мне надо взять строку, введенную пользователем, зашифровать ее, и полученный результат присвоить строковой переменной, шифрование проходит без проблем, а вот расшифровка не получается:
Dim Key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
Dim IV As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
'===========================================================
Dim RMCrypto1 As New Security.Cryptography.RijndaelManaged
Dim ms1 As New System.IO.MemoryStream
Dim CryptStream1 As New Security.Cryptography.CryptoStream(ms1, RMCrypto1.CreateEncryptor(Key, IV), _
Security.Cryptography.CryptoStreamMode.Write)
Dim SWriter1 As New IO.StreamWriter(CryptStream1)
Dim s As String = ""
SWriter1.WriteLine(TextBox1.Text)
SWriter1.Close()
CryptStream1.Close()
TextBox2.Text = System.Text.Encoding.UTF8.GetString(ms1.ToArray())
'===========================================================
Dim RMCrypto2 As New Security.Cryptography.RijndaelManaged
Dim ms2 As New System.IO.MemoryStream
Dim enc As New System.Text.UTF8Encoding
Dim arrBytData() As Byte = enc.GetBytes(TextBox2.Text)
ms2.Write(arrBytData, 0, arrBytData.Length)
Dim CryptStream2 As New Security.Cryptography.CryptoStream(ms2, RMCrypto2.CreateDecryptor(Key, IV), _
Security.Cryptography.CryptoStreamMode.Read)
Dim SReader2 As New IO.StreamReader(CryptStream2)
TextBox3.Text = SReader2.ReadToEnd()
SReader2.Close()
ms2.Close()
CryptStream2.Close()
На строке "TextBox3.Text = SReader2.ReadToEnd()" возникает ошибка "Индекс находился вне границ массива."...
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
---Fix---
ICQ: 348680795
Вопросов: 12
Ответов: 33
Профиль | | #1
Добавлено: 23.01.13 08:21
Может я не прав, не работал с этим классом, но скорей всего проблема в том, что при преобразовании массива в строку:
теряются байты, т.к. строки не хранят "неуправляемые" символы. Попробуйте при расшифровке сразу передать ms1. Если получится, значит в этом и проблема.
Номер ответа: 2
Автор ответа:
ЛеШий
Вопросов: 21
Ответов: 41
Профиль | | #2
Добавлено: 04.02.13 00:16
Нашел пример, решающий мою задачу:
http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.cryptostream.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 16.02.13 02:42
Вектор инициализации нужно каждый раз генерировать случайно.