Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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
берешь каждый символ, юзаешь к нему функцию Asc(<symbol>;) и пихаешь это в byte-массив

Спасибо, насшмешил... )))

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 12.12.06 20:00
Есть несколько классов Encoding (в зависимости от кодировки UTF8Encoding,ASCIIEncoding и т.д.) Так вот у него есть метод.. GetBytes, вот его и юзаешь..
Если бы внимателно смотрел свой пример, то ты понял бы значение этих строк:
Dim enc As New UnicodeEncoding, bytes() As Byte
        '===========ЭТАП 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.IO
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

        '        ;Dim 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
Поправка!
Public Key(0 To 31) As Byte

Сменить на
Public Key() As Byte

В принципе без разницы...
И еще, пробовал шифровать файлы размером примерно 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.
Там показано полное решение..

Ответить

Страница: 1 |

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



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