шифрование текста

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Свиридов С
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 28.09.2008 (Вс) 7:29

шифрование текста

Сообщение Свиридов С » 09.11.2008 (Вс) 1:26

Народ, подскажите как зашифровать текс .
У меня есть пример шифрование текста в файл и дешифрование обратно из файла
Код: Выделить всё
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} 'Вектор инициализации


    Private Sub Encrypt()
        'Создаём экземпляр класса RijndaelManaged
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        'Создаём FileStream, туда будет записана зашифрованная информация
        Dim fs As New IO.FileStream("C:\crypted.dat", IO.FileMode.Create)
        'Создаём CryptoStream
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
        'Создаём StreamWriter для записи данных в CryptoStream
        Dim SWriter As New IO.StreamWriter(CryptStream)
        'Пишем что-нибудь в CryptoStream
        SWriter.WriteLine("Эта информация зашифрована симметричным алгоритмом Rijndael!")
        'Закрываем все объекты
        SWriter.Close()
        fs.Close()
        CryptStream.Close()
    End Sub

    Private Sub Decrypt()
        'Создаём экземпляр класса RijndaelManaged
        Dim RMCrypto As New Security.Cryptography.RijndaelManaged
        'Создаём FileStream, оттуда будем читать зашифрованную информацию
        Dim fs As New IO.FileStream("C:\crypted.dat", IO.FileMode.Open)
        'Создаём CryptoStream
        Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
        'Создаём StreamReader для чтения данных из CryptoStream
        Dim SReader As New IO.StreamReader(CryptStream)
        'Читаем расшифрованную информацию из CryptoStream и пишем её в консоль
        Console.WriteLine(SReader.ReadToEnd())
        'Закрываем все объекты
        SReader.Close()
        fs.Close()
        CryptStream.Close()
    End Sub


а мне необходимо шифровать просто в текстовую переменную и дешифровать тоже из текстовой переменной. Хеширование мне не подходит.
Если можно приведите примерчик ...
Заранее благодарен всем кто откликнется, Williams и Sebas заранее спасибо :)

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: шифрование текста

Сообщение Williams » 09.11.2008 (Вс) 1:44

Ну смотри, шифруем не текст, а байты, то есть текст в определенной кодировке. В классическом варианте это UTF-8.

Для того, чтобы преобразовать текст в байты делаем так: System.Text.Encoding.UTF8.GetBytes("строка"), обратно же ... Encoding.UTF8.GetString(байт-массив). Следовательно, пример делает то, что нужно (Triple-DES, для других алгоритмов схема аналогична):

Код: Выделить всё
    Public Shared Function Decrypt(ByVal inputInBytes() As Byte) As String


        Dim tdesProvider As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
        Dim cryptoTransform As ICryptoTransform = tdesProvider.CreateDecryptor(key, iv)

        Dim decryptedStream As MemoryStream = New MemoryStream()
        Dim cryptStream As CryptoStream = New CryptoStream(decryptedStream, cryptoTransform, CryptoStreamMode.Write)
        cryptStream.Write(inputInBytes, 0, inputInBytes.Length)
        cryptStream.FlushFinalBlock()
        decryptedStream.Position = 0

        Dim result(decryptedStream.Length - 1) As Byte
        decryptedStream.Read(result, 0, decryptedStream.Length)
        cryptStream.Close()
        Dim myutf As UTF8Encoding = New UTF8Encoding()
        Decrypt = myutf.GetString(result)


    End Function



    Public Shared Function Encrypt(ByVal plainText As String) As Byte()

        Dim inputInBytes() As Byte = Encoding.UTF8.GetBytes(plainText)

        Dim tdesProvider As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()

        Dim cryptoTransform As ICryptoTransform = tdesProvider.CreateEncryptor(key, iv)

        Dim encryptedStream As MemoryStream = New MemoryStream()
        Dim cryptStream As CryptoStream = New CryptoStream(encryptedStream, cryptoTransform, CryptoStreamMode.Write)
        cryptStream.Write(inputInBytes, 0, inputInBytes.Length)
        cryptStream.FlushFinalBlock()
        encryptedStream.Position = 0

        Dim result(encryptedStream.Length - 1) As Byte
        encryptedStream.Read(result, 0, encryptedStream.Length)
        cryptStream.Close()

        Encrypt = result

    End Function
И вы думаете, что вас оставят в живых после прочтения этого поста?

Свиридов С
Начинающий
Начинающий
 
Сообщения: 14
Зарегистрирован: 28.09.2008 (Вс) 7:29

Re: шифрование текста

Сообщение Свиридов С » 09.11.2008 (Вс) 9:33

Williams спасибо за ответ.
но то что мне нужно я так и не смог получить :( , вероятно я не правильно объяснил то что мне нужно или просто не смог понять как это использовать.
Мне нужно записать в файл XML некоторые данные, часть этих данных я хочу записать в зашифрованном виде, и при необходимости программа должна получить эти данные из XML ...
Допустим у меня есть строка "это данные не для простого просмотра" , мне надо именно эту строку в зашифрованном виде записать в XML

Код: Выделить всё
Dim secret As String = "это данные не для простого просмотра" '  в переменную secret мне необходимо запихать зашифрованный текст

Код: Выделить всё
Public Sub create_test_xml()
           
Dim fileName As String = "test.xml"
            Dim doc As New XDocument()
            Dim actions As New XElement("setings")
            doc.Add(setings)

            Dim set_1 As New XElement("seting")
            set_1.Add(New XAttribute("name",secret ))' вот сдесь надо сохранить текстовые данные в зашифрованном виде           
            doc.Root.Add(set_1)
            doc.Save(fileName)
    End Sub


в процессе работы программа будет использовать данный XML , и необходимо получить атрибут name , расшифровать его, и дальше использовать.
... на работу бежать надо ... , после работы допишу если опять не совсем точно изъяснился ...

с работы пришёл :).
продолжу.
программа в определённый момент будет парсить этот хмл файла и получать значение атрибута , допустим в текстовую переменную и потом надо будет эти данные расшифровать обратно что бы получился исходный текст.
Меня интересует только сам принцип шифрования и дешифрования, но с условием что бы результаты обоих действий можно было предствавить в виде текста.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList