|
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
|
|||
---|---|---|---|
#18+
Дано: IIS6 c Framework 4.0.30319 Шифруем строку данных, помещаем ее через MemoryStream в строку Base64 и расшифровываем эту строку. Программа VBScript в ASP.NET: 'Шифрование********************************************************************************* 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 SlugString 'Создаём экземпляр класса RijndaelManaged Dim RMCrypto As New System.Security.Cryptography.RijndaelManaged 'Создаём MemoryStream туда будет записана зашифрованная информация Dim Memstream As New System.IO.MemoryStream MemStream.Position = 0 'Создаём CryptoStream Dim CryptStream As New System.Security.Cryptography.CryptoStream(Memstream, RMCrypto.CreateEncryptor(Key, IV), System.Security.Cryptography.CryptoStreamMode.Write) 'Создаём StreamWriter для записи данных в CryptoStream Dim SWriter As New SyStem.IO.StreamWriter(CryptStream) 'Пишем что-нибудь в CryptoStream SWriter.WriteLine("Эта информация зашифрована симметричным алгоритмом Rijndael!") CryptStream.FlushFinalBlock() 'Читаем из MemStream MemStream.Position = 0 response.write("MemStream.Length=" & trim(MemStream.Length)) SlugString = Convert.ToBase64String(MemStream.ToArray()) response.write(" SlugString=""" & trim(SlugString) & """") 'В массиве MemStream.ToArray() 16 элементов, в каждом элементе массова - двухбайтовый кода символа 'Закрываем все объекты SWriter.Close() CryptStream.Close() Memstream.close() Memstream = Nothing CryptStream = Nothing SWriter = Nothing '***************** зашифрованные данные в SlugString Base64 'Создаём экземпляр класса RijndaelManaged Dim Memstream1 As New System.IO.MemoryStream Dim RMCrypto1 As New System.Security.Cryptography.RijndaelManaged response.write("<br />Чтение данных для расшифровки: Len(SlugString)=" & Len(SlugString)) response.write("<br />System.Text.Encoding.Default.GetBytes(SlugString).Length=" & trim(System.Text.Encoding.Default.GetBytes(SlugString).Length) ) MemStream1.Position = 0 ' конвертируем строку Base64 в byte массив MemStream1.Write(Convert.FromBase64String(SlugString), 0, Convert.FromBase64String(SlugString).Length) Response.write("<br />MemStream1.Length=" & trim(MemStream1.Length) ) 'Создаём CryptoStream1 Dim CryptStream1 As New System.Security.Cryptography.CryptoStream(Memstream1, RMCrypto1.CreateDecryptor(Key, IV), System.Security.Cryptography.CryptoStreamMode.Read) 'Создаём StreamReader для чтения данных из CryptoStream1 Dim SReader As New SyStem.IO.StreamReader(CryptStream1) 'Читаем расшифрованную информацию из CryptoStream и пишем её в форму Response.write("<br />SReader.ReadToEnd().Length=" & trim(SReader.ReadToEnd().Length)) 'Возвращает SReader.ReadToEnd().Length=0 Response.write(" Расшифровано: """ & trim(SReader.ReadToEnd()) & """") 'Возвращает ПУСТУЮ СТРОКУ: Расшифровано: "" 'Закрываем все объекты SReader.Close() CryptStream1.Close() Memstream1.close() SReader = Nothing CryptStream1 = Nothing Memstream1 = Nothing При использовании вместо MemoryStream файлового потока, сохранения в файл - чтения из файла - все работает. Единственное дополнение, добавленное мною при использовании MemoryStream - это команда CryptStream.FlushFinalBlock() после SWriter.WriteLine("Эта информация..."). Вопрос: Почему SReader.ReadToEnd() возвращает пустую строку? Помогите найти ошибку (недоработку) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 12:50 |
|
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
|
|||
---|---|---|---|
#18+
Фух, едва продрался. После Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 13:13 |
|
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
|
|||
---|---|---|---|
#18+
Добавил, не помогает: '***************** зашифрованные данные в SlugString Base64 'Создаём экземпляр класса RijndaelManaged Dim Memstream1 As New System.IO.MemoryStream Dim RMCrypto1 As New System.Security.Cryptography.RijndaelManaged response.write("<br />Чтение данных для расшифровки: Len(SlugString)=" & Len(SlugString)) response.write("<br />System.Text.Encoding.Default.GetBytes(SlugString).Length=" & trim(System.Text.Encoding.Default.GetBytes(SlugString).Length) ) MemStream1.Position = 0 ' конвертируем строку Base64 в byte массив MemStream1.Write(Convert.FromBase64String(SlugString), 0, Convert.FromBase64String(SlugString).Length) MemStream1.Position = 0 ' -ДОБАВИЛ Response.write("<br />MemStream1.Length=" & trim(MemStream1.Length) ) 'Возвращает MemStream1.Length=16 'Создаём CryptoStream1 Dim CryptStream1 As New System.Security.Cryptography.CryptoStream(Memstream1, RMCrypto1.CreateDecryptor(Key, IV), System.Security.Cryptography.CryptoStreamMode.Read) 'Создаём StreamReader для чтения данных из CryptoStream1 Dim SReader As New SyStem.IO.StreamReader(CryptStream1) 'Читаем расшифрованную информацию из CryptoStream и пишем её в форму MemStream1.Position = 0 Response.write("<br />SReader.ReadToEnd().Length=" & trim(SReader.ReadToEnd().Length)) 'Возвращает SReader.ReadToEnd().Length=0 Response.write(" Расшифровано: """ & trim(SReader.ReadToEnd()) & """") 'Возвращает Расшифровано: "" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2013, 13:39 |
|
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
|
|||
---|---|---|---|
#18+
Почему CryptoStream не возвращает данные при дешифрации данных из MemoryStream? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2013, 05:43 |
|
|
start [/forum/topic.php?fid=17&fpage=23&tid=1349905]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 426ms |
0 / 0 |