В .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 : csharp,программирование,шифрование,алгоритмы




Январь 1, 2008 в 8:29 пп |
[...] CryptoAPI in .NET (C# version) – я уже касался этой темы, еще [...]