Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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
Может я не прав, не работал с этим классом, но скорей всего проблема в том, что при преобразовании массива в строку:
  1. TextBox2.Text = System.Text.Encoding.UTF8.GetString(ms1.ToArray())

теряются байты, т.к. строки не хранят "неуправляемые" символы. Попробуйте при расшифровке сразу передать 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
Ответов: 6596
 Профиль | | #3 Добавлено: 16.02.13 02:42
Вектор инициализации нужно каждый раз генерировать случайно.

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам