В .NET поддерживает 4 симметричной криптосистемы, реализованные в классах: DESCryptoServiceProvider, TripleDESCryptoServiceProvider, RC2CryptoServiceProvider and RijndaelCryptoServiceProvider, объединенных в пространстве System.Security.Cryptography.

Все симметричные алгоритмы используют секретный ключ(Key) и вектор инициализации (IV – initialization vector), которые создаются с помощью методов GenerateKey, GenerateIV соответственно. Не будем мусолить, а рассмотрим код:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Security.Cryptography;
 5 using System.IO;
 6 
 7 namespace ConsoleApplication2
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.Title = "Symmetric Algorithms Cryptography";
14             Console.WriteLine("Enter File Path:");
15             String path = Console.ReadLine();
16             List<String> algorithms = new List<String>();
17             algorithms.Add("DES");
18             algorithms.Add("TripleDES");
19             algorithms.Add("RC2");
20             algorithms.Add("Rijndael");
21             foreach (String algorithm in algorithms)
22             {
23                 SymmetricAlgorithm symmetricAlgorithm = SymmetricAlgorithm.Create(algorithm);
24                 symmetricAlgorithm.GenerateKey();
25                 symmetricAlgorithm.GenerateIV();
26 
27 
28                 String outPath = Path.GetDirectoryName(path) + @"" +
29                     Path.GetFileNameWithoutExtension(path) + "_" + algorithm;
30                 String encryptedPath = outPath + ".encrypted";
31                 String decryptedPath = outPath + ".decrypted";
32                 Encrypt(symmetricAlgorithm, path, encryptedPath);
33                 Decrypt(symmetricAlgorithm, encryptedPath, decryptedPath);
34                 Console.WriteLine(algorithm + " Done!");
35             }
36             Console.ReadLine();
37         }
38         private static void Encrypt(SymmetricAlgorithm symmetricAlgorithm,
39             String inPath, String outPath)
40         {
41             FileStream outStream = File.OpenWrite(outPath);
42             ICryptoTransform transform = symmetricAlgorithm.CreateEncryptor();
43             CryptoStream cryptoStream = new CryptoStream(outStream, transform, CryptoStreamMode.Write);
44             Byte[] inFile = File.ReadAllBytes(inPath);
45             cryptoStream.Write(inFile, 0, inFile.Length);
46             cryptoStream.Close();
47         }
48         private static void Decrypt(SymmetricAlgorithm symmetricAlgorithm,
49             String inPath, String outPath)
50         {
51             ICryptoTransform transform = symmetricAlgorithm.CreateDecryptor();
52             Stream inStream = File.OpenRead(inPath);
53             CryptoStream cryptoStream = new CryptoStream(inStream, transform, CryptoStreamMode.Read);
54             Byte[] buffer = new Byte[50];
55             int length = cryptoStream.Read(buffer, 0, buffer.Length);
56             Stream outStream = File.OpenWrite(outPath);
57             while (length > 0)
58             {
59                 outStream.Write(buffer, 0, length);
60                 length = cryptoStream.Read(buffer, 0, buffer.Length);
61 
62             }
63             inStream.Close();
64             outStream.Close();
65         }
66     }
67 }

Скачать пример

Процесс шифрования\дешифрования представляет из себя следующее:

Сначала мы создаем экземпляр SymmetricAlgorithm вызовом статик метода Create(), передавая ему имя алгоритма. Затем используя, CreateEncryptor() и CreateDecryptor() создаем потоки шифр.\дешифр.:

1   ICryptoTransform transform = symmetricAlgorithm.CreateEncryptor();
2             CryptoStream cryptoStream = new CryptoStream(outStream, transform, CryptoStreamMode.Write);

За подробностями лезь в MSDN и ко мне в комменты…

…а музыка была: Placebo – Special K

Blogus tags : ,,,

Tags: