|
|
|
AvnAvn |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 7.9.2006 Репутация: нет Всего: нет |
Дано: 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() возвращает пустую строку? |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | ASP | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |