Страница: 1 |
Страница: 1 |
Вопрос: Из String в Byte, надо для шифрования
Добавлено: 12.12.06 19:01
Автор вопроса: ZXC
Вот статью нашел http://www.gotdotnet.ru/LearnDotNet/ASPNET/54574.aspx
но там текст шифруется из текстового поля, а как зашифровать то что считалось из файла? ведь шифруется только Byte тип :(
Пример:
Private Sub btnEncrypt_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEncrypt.Click
' Провайдер DES-шифрования
Dim DES As New DESCryptoServiceProvider
' Интерфейс-шифратор
Dim DES_Encryptor As ICryptoTransform = DES.CreateEncryptor
' Файловый поток
Dim fs As New FileStream(Server.MapPath("temp.dat"), FileMode.Create)
' Поток шифрования
Dim DESCryptoStream As New CryptoStream(fs, _
DES_Encryptor, CryptoStreamMode.Write)
' Класс для получения массива байтов из строки и массив байтов
Dim enc As New UnicodeEncoding, bytes() As Byte
'===========ЭТАП 1: шифруем данные и сохраняем их в файле============
' Получаем массив байтов из строки поля txt
bytes = enc.GetBytes(txt.Value)
' Шифруем данные
DESCryptoStream.Write(bytes, 0, bytes.Length)
' Закрываем потоки
DESCryptoStream.Close()
fs.Close()
fs = Nothing
'===========ЭТАП 2: Читаем данные из сохранённого файла=============
' Открываем поток
fs = New FileStream(Server.MapPath("temp.dat"), FileMode.Open)
' Инициализируем класс-читатель потока
Dim sr As New StreamReader(fs)
' Читаем зашифрованный текст из файлового потока
lblResult.Text = sr.ReadToEnd
' Закрываем потоки
sr.Close()
fs.Close()
'===========ЭТАП 3: Удаляем временный файл "temp.dat"===============
File.Delete(Server.MapPath("temp.dat"))
End Sub
Тут ещё и на ASP.NET, а надо на vb.net, кстати там внизу нашел ещё пример на vb.net и в статье из текстового поля переводят в байты так
Dim b() As Byte = ToBytes(TextBox1.Text)
что такое ToBytes? у меня такого нет почемуто =)
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 12.12.06 19:29
берешь каждый символ, юзаешь к нему функцию Asc(<symbol> и пихаешь это в byte-массив
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 12.12.06 19:55
Спасибо, насшмешил... )))
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 12.12.06 20:00
Есть несколько классов Encoding (в зависимости от кодировки UTF8Encoding,ASCIIEncoding и т.д.) Так вот у него есть метод.. GetBytes, вот его и юзаешь..
Если бы внимателно смотрел свой пример, то ты понял бы значение этих строк:
'===========ЭТАП 1: шифруем данные и сохраняем их в файле============
' Получаем массив байтов из строки поля txt
bytes = enc.GetBytes(txt.Value)
И не задавал бы ненужных вопросов..
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 12.12.06 20:00
Не чуди ничего, посмотри что принимает DESCryptoStream.Write
Кстати в твоем же примере есть код который перегоняет строку в массив байт, переделать его в преобразование массива байтов в строку - не нужно иметь диплом Гарварда.
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 12.12.06 20:01
2 EROS
Не флуди, я раньше начал набивать ответ на вопрос
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 12.12.06 20:17
зато я печатаю быстрее!!! )))))
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 12.12.06 23:33
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 13.12.06 08:16
А разве непонятно, что я имел ввиду? Меня насмешил предложенный тобой метод перевода строки в байтовый массив!! ))
Номер ответа: 9
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #9
Добавлено: 13.12.06 12:33
ToBytes это функция... А с ASP переделать на VB времени 10 сек...
Imports System.Security.Cryptography
Imports System.Text
Imports VB = Microsoft.VisualBasic
Public Class Form1
Public Key(0 To 31) As Byte
Dim IV() As Byte = {196, 161, 224, 67, 23, 143, 39, 43, 188, 91, _
247, 125, 97, 95, 246, 26}
'Шифрование файла
Private Sub cmdFileEnc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFileEnc.Click
'  im temp() As Byte
Dim fs1 As New FileStream("Путь к файлу который шифруем", FileMode.Open)
Dim sr1 As New BinaryReader(fs1)
Dim f As New FileInfo("Путь к файлу который шифруем"
Dim AES As New RijndaelManaged
Key = ToBytes("Пароль 16 символов(не меньше, не больше)"
Dim AES_Encryptor As ICryptoTransform = AES.CreateEncryptor(Key, IV)
Dim fs As New FileStream("Путь к зашифрованному файлу файлу", FileMode.Create)
Dim AESCryptoStream As New CryptoStream(fs, AES_Encryptor, CryptoStreamMode.Write)
AESCryptoStream.Write(sr1.ReadBytes(f.Length), 0, f.Length)
AESCryptoStream.Close()
fs.Close()
sr1.Close()
fs1.Close()
End Sub
'Дешифрование файла
Private Sub cmdFileDec_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFileDec.Click
'Dim temp1 As String
'Dim temp2() As Byte
Dim AES As New RijndaelManaged
Key = ToBytes("Пароль (опять 16 символов)"
Dim AES_Decryptor As ICryptoTransform = AES.CreateDecryptor(Key, IV)
Dim fs As New FileStream("Путь к зашифрованному файлу", FileMode.Open)
Dim AESCryptoStream As New CryptoStream(fs, AES_Decryptor, CryptoStreamMode.Read)
Dim sr As New BinaryReader(AESCryptoStream)
Dim fs2 As New FileStream("Путь к расшифрованнуму файлу", FileMode.Create)
Dim sr2 As New BinaryWriter(fs2)
' Служит для определения размера файла
Dim f As New FileInfo("Путь к зашифрованному файлу"
sr2.Write(sr.ReadBytes(f.Length))
sr2.Close()
fs2.Close()
sr.Close()
fs.Close()
End Sub
Private Function ToBytes(ByVal s As String) As Byte()
Dim enc As New UnicodeEncoding
Return enc.GetBytes(s)
End Function
Этот код использует RijndaelManaged
Номер ответа: 10
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #10
Добавлено: 13.12.06 12:38
Поправка!
Сменить на
В принципе без разницы...
И еще, пробовал шифровать файлы размером примерно 50Mb и 700Mb, 50Mb шифрует, а 700Mb не хочет... ругается...
Номер ответа: 11
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #11
Добавлено: 13.12.06 15:06
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 13.12.06 19:31
В NET это делается 1 строчкой.. почитай пост №3.
Там показано полное решение..