Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Шифрование


Автор: YoD 26.12.2004, 13:12
Подскажите пожалуйста, как можно зашифровать (синхронным шифрование) и потом расшифровать:

а). Содержимое тестовой переменной
б). Файла

Автор: [Last]Wizard 27.12.2004, 15:53
В пространстве имен System.Security.Cryptography реализована масса алгоритмов шифрования/дешифрования данных, такие как DES, RSA, алгоритмы электронно-цифровой подписи DSA, SHA-1, SHA-256, SHA-384, SHA-512, MD5, а также еще много интересного.

Автор: YoD 27.12.2004, 18:31
Это я нашёл. Но разобраться с многообразием не смог.

Всё что я освоил это:

dim Enc as system.security.cryptography.simmetricalgorithm
enc.createencriptor()

А что дальше делать - незнаю... если кто разобрался - киньте плиз какой-нибудь рабочий исходник.

Всё равно спасибо за информацию

Автор: [Last]Wizard 27.12.2004, 19:24
В общем картина такова:

1. Класс System.Security.Cryptography.SymmetricAlgorithm - это абстрактный класс, базовый для симметричных алгоритмов шифрования, таких как DES и другие. Есть еще класс System.Security.Cryptography.AsymmetricAlgorithm - базовый для асимметричных алгоритмов (RSA, DSA, и др.) Класс абстрактный (MustInherit) - следовательно создать его экземпляр напрямую нельзя.

* Симметричные алгоритмы - те, которые шифруются и дешифруются одним и тем же ключом, Асимметричные алгоритмы - системы с открытым (public) и секретным (private) ключами.

2. Доступ к реализациям конкретных алгоритмов производится с помощью классов-наследников, которые называются System.Security.Cryptography.XXXCryptoServiceProvider, где XXX - название алгоритма. Например System.Security.Cryptography.DESCryptoServiceProvider.

3. Шифрование файлов и любых других потоков производится с помощью класса System.Security.Cryptography.CryptoStream. Это класс - наследник от System.IO.Stream - предоставляет интерфейс для записи и чтения данных из этого потока. Для того, чтобы создать объект этого класса, необходимо указать реальный поток, куда будут записываться данные или откуда они будут считываться (например файл), шифратор/дешифратор, который будет непосредственно шифровать/дешифровать данные, а также режим использования потока (чтение или запись).

4. Для того, чтобы получить шифратор/дешифратор необходимо вызвать метод CreateEncryptor() или CreateDecryptor() класса System.Security.Cryptography.XXXCryptoServiceProvider. Эти методы возвращают ссылку на интерфейс System.Security.Cryptography.ICryptoTransform, реализация которого зависит от выбраного алгоритма шифрования.

5. Для шифрования статических данных (не файлов) можно использовать реализацию методов TransformBlock() и TransformFinalBlock() интерфейса System.Security.Cryptography.ICryptoTransform.

6. Рабочий исходник:

Код
   Private Sub EncryptData(ByVal inName As String, ByVal outName As String)

       'Create the file streams to handle the input and output files.
       Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read)
       Dim fout As New FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write)
       fout.SetLength(0)

       'Create variables to help with read and write.
       Dim bin(4096) As Byte 'This is intermediate storage for the encryption.
       Dim rdlen As Long = 0 'This is the total number of bytes written.
       Dim totlen As Long = fin.Length 'Total length of the input file.
       Dim len As Integer 'This is the number of bytes to be written at a time.
       Dim des As New DESCryptoServiceProvider
       Dim encStream As New CryptoStream(fout, des.CreateEncryptor(), CryptoStreamMode.Write)

       Console.WriteLine("Encrypting...")

       'Read from the input file, then encrypt and write to the output file.
       While rdlen < totlen
           len = fin.Read(bin, 0, 4096)
           encStream.Write(bin, 0, len)
           rdlen = Convert.ToInt32(rdlen + len / des.BlockSize * des.BlockSize)
           Console.WriteLine("Processed {0} bytes, {1} bytes total", len, rdlen)
       End While

       encStream.Close()
   End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)