powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
5 сообщений из 5, страница 1 из 1
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
    #38429515
AvnAvnAvn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано: 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(Memstrea​­m, RMCrypto.CreateEncryptor(Key, IV), System.Security.Cryptography.CryptoStreamMode.Writ​­e)
'Создаём 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(SlugStr​­ing).Length) )

MemStream1.Position = 0
' конвертируем строку Base64 в byte массив
MemStream1.Write(Convert.FromBase64String(SlugStri​­ng), 0, Convert.FromBase64String(SlugString).Length)
Response.write("<br />MemStream1.Length=" & trim(MemStream1.Length) )
'Создаём CryptoStream1
Dim CryptStream1 As New System.Security.Cryptography.CryptoStream(Memstrea​­m1, 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() возвращает пустую строку? Помогите найти ошибку (недоработку)
...
Рейтинг: 0 / 0
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
    #38429565
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фух, едва продрался.

После
Код: plaintext
MemStream1.Write(Convert.FromBase64String(SlugStri​­ng), 0, Convert.FromBase64String(SlugString).Length)
надо MemStream1 на начало перемотать (.Position = 0)
...
Рейтинг: 0 / 0
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
    #38429627
AvnAvnAvn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил, не помогает:

'***************** зашифрованные данные в 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()) & """") 'Возвращает Расшифровано: ""
...
Рейтинг: 0 / 0
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
    #38432205
AvnAvnAvn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему CryptoStream не возвращает данные при дешифрации данных из MemoryStream?
...
Рейтинг: 0 / 0
RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
    #38432496
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AvnAvnAvn,

... вы прочитайте поочередно .Length каждого из стримов, по крайней мере поймете, где не читается ....
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / RijndaelManaged После шифрования и расшифровывания строки возвращается пустое значение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]