Csharp/CSharp Tutorial/Security/Encryption
PublicKey Cryptography
<source lang="csharp">using System; using System.Security.Cryptography;
class Class1 { static void Main(string[] args) { string dataToSign = "this is a test."; byte[] data_Bytes = System.Text.Encoding.ASCII.GetBytes( dataToSign ); SHA1Managed sha1 = new SHA1Managed(); byte[] hash_Bytes = sha1.ruputeHash( data_Bytes ); DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(); DSASignatureFormatter sigFormatter = new DSASignatureFormatter(dsa); sigFormatter.SetHashAlgorithm("SHA1"); byte[] signedHash = sigFormatter.CreateSignature( hash_Bytes ); byte[] remote_SignedHash = signedHash; byte[] remote_HashedValue = hash_Bytes; DSASignatureDeformatter sigDeformatter = new DSASignatureDeformatter( dsa ); sigDeformatter.SetHashAlgorithm( "SHA1" ); Console.WriteLine(sigDeformatter.VerifySignature( remote_HashedValue, remote_SignedHash )); RSACryptoServiceProvider rsa= new RSACryptoServiceProvider(); byte[] dataToEncrypt = System.Text.Encoding.Unicode.GetBytes( "Encrypt THIS!" ); byte[] encrypted_Bytes; byte[] decrypted_Bytes; encrypted_Bytes = rsa.Encrypt( dataToEncrypt, false ); Console.WriteLine("RSA-encrypted data is {0} bytes long.", encrypted_Bytes.Length); decrypted_Bytes = rsa.Decrypt( encrypted_Bytes, false ); Console.WriteLine("RSA-decrypted string is {0}.", System.Text.Encoding.Unicode.GetString( decrypted_Bytes )); } }</source>
Secret Key Cryptography: RijndaelManaged
<source lang="csharp">using System; using System.IO; using System.Text; using System.Security.Cryptography;
class Class1 { static void Main(string[] args) { byte[] bin = new byte[100]; // 100 byte buffer FileStream fsIn = new FileStream("input.txt", FileMode.Open, FileAccess.Read); long rdLen = 0; long totLen = fsIn.Length; int len; RijndaelManaged rm = new RijndaelManaged(); rm.GenerateIV(); rm.GenerateKey(); FileStream fsOut_RM = new FileStream("outputRM.txt", FileMode.Create, FileAccess.Write); CryptoStream rmStream = new CryptoStream( fsOut_RM, rm.CreateEncryptor(), CryptoStreamMode.Write); while ( rdLen < totLen ) { len = fsIn.Read(bin, 0, 100); System.Diagnostics.Debug.WriteLine("Read " + len.ToString() + " bytes."); rmStream.Write(bin, 0, len ); rdLen += len; Console.WriteLine("{0} Bytes Read.", rdLen ); } fsIn.Close(); } }</source>
Symmetric Encryption
<source lang="csharp">using System; using System.IO; using System.Security; using System.Security.Cryptography; using System.Collections.Generic; using System.Text;
class Program { static void Main(string[] args) { RijndaelManaged rmCrypto = new RijndaelManaged(); byte[] key = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }; byte[] IV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }; string clearMessage = "this is a test"; FileStream fs = new FileStream("encrypted.dat", FileMode.Create); CryptoStream cs = new CryptoStream(fs, rmCrypto.CreateEncryptor(key, IV), CryptoStreamMode.Write); cs.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(clearMessage),0, clearMessage.Length); cs.Close(); fs.Close(); FileStream fs2 = new FileStream("encrypted.dat", FileMode.Open); CryptoStream cs2 = new CryptoStream(fs2, rmCrypto.CreateDecryptor(key, IV), CryptoStreamMode.Read); byte[] decryptedData = new byte[fs2.Length]; cs2.Read(decryptedData, 0, (int)fs2.Length); cs2.Close(); fs2.Close(); Console.WriteLine(System.Text.ASCIIEncoding.ASCII.GetString(decryptedData)); } }</source>