C#各种加密算法的研究
生活随笔
收集整理的這篇文章主要介紹了
C#各种加密算法的研究
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;namespace test_CryptoGraphy
{class Program{/// <summary>/// MD5 加密靜態方法/// </summary>/// <param name="EncryptString">待加密的明文</param>/// <returns>加密后的密文</returns>public static string MD5Encrypt(string EncryptString){if (string.IsNullOrEmpty(EncryptString)){throw(new Exception("明文不得為空!"));}MD5 m_ClassMD5 = new MD5CryptoServiceProvider();string m_strEncrypt = "";try{m_strEncrypt = BitConverter.ToString(m_ClassMD5.ComputeHash(Encoding.Default.GetBytes(EncryptString))).Replace("-","");}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_ClassMD5.Clear();}return m_strEncrypt;}/// <summary>/// DES 加密(數據加密標準,速度較快,適用于加密大量數據的場合)/// </summary>/// <param name="EncryptString">待加密的明文</param>/// <param name="EncryptKey">加密的密鑰</param>/// <returns>加密后的密文</returns>public static string DESEncrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)){throw (new Exception("明文不得為空!"));}if (string.IsNullOrEmpty(EncryptKey)){throw (new Exception("密鑰不得為空!"));}if (EncryptKey.Length != 8){throw new Exception("密鑰必須為8位");}byte[] m_btIV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strEncrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey),m_btIV),CryptoStreamMode.Write);m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close();m_stream.Dispose();m_cstream.Close();m_cstream.Dispose();}catch (IOException ex){throw ex;}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_DESProvider.Clear();}return m_strEncrypt;}/// <summary>/// DES 解密(數據加密標準,速度較快,適用于加密大量數據的場合)/// </summary>/// <param name="DecryptString">待解密的密文</param>/// <param name="DecryptKey">解密的密鑰</param>/// <returns>解密后的明文</returns>public static string DESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)){throw (new Exception("密文不得為空!"));}if (string.IsNullOrEmpty(DecryptKey)){throw (new Exception("密鑰不得為空!"));}if (DecryptKey.Length != 8){throw new Exception("密鑰必須為8位");}byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close();m_stream.Dispose();m_cstream.Close();m_cstream.Dispose();}catch (IOException ex){throw ex;}catch (ArgumentException ex){throw ex;}catch (CryptographicException ex){throw ex;}catch (Exception ex){throw ex;}finally{m_DESProvider.Clear();}return m_strDecrypt;}/* /// <summary>/// DES 解密(數據加密標準,速度較快,適用于加密大量數據的場合)/// </summary>/// <param name="DecryptString">待解密的密文</param>/// <param name="DecryptKey">解密的密鑰</param>/// <returns>returns</returns>public static string DESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }if (DecryptKey.Length != 8) { throw (new Exception("密鑰必須為8位")); }byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_DESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_DESProvider.Clear(); }return m_strDecrypt;}*//// <summary>/// RC2 加密(用變長密鑰對大量數據進行加密)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey">加密密鑰</param>/// <returns>returns</returns>public static string RC2Encrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密鑰不得為空")); }if (EncryptKey.Length < 5 || EncryptKey.Length > 16) { throw (new Exception("密鑰必須為5-16位")); }string m_strEncrypt = "";byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btEncryptString, 0, m_btEncryptString.Length);m_cstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_RC2Provider.Clear(); }return m_strEncrypt;}/// <summary>/// RC2 解密(用變長密鑰對大量數據進行加密)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey">解密密鑰</param>/// <returns>returns</returns>public static string RC2Decrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }if (DecryptKey.Length < 5 || DecryptKey.Length > 16) { throw (new Exception("密鑰必須為5-16位")); }byte[] m_btIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };string m_strDecrypt = "";RC2CryptoServiceProvider m_RC2Provider = new RC2CryptoServiceProvider();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_cstream = new CryptoStream(m_stream, m_RC2Provider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_cstream.Write(m_btDecryptString, 0, m_btDecryptString.Length);m_cstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_cstream.Close(); m_cstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_RC2Provider.Clear(); }return m_strDecrypt;}/// <summary>/// 3DES 加密(基于DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey1">密鑰一</param>/// <param name="EncryptKey2">密鑰二</param>/// <param name="EncryptKey3">密鑰三</param>/// <returns>returns</returns>public static string DES3Encrypt(string EncryptString, string EncryptKey1, string EncryptKey2, string EncryptKey3){string m_strEncrypt = "";try{m_strEncrypt = DESEncrypt(EncryptString, EncryptKey3);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey2);m_strEncrypt = DESEncrypt(m_strEncrypt, EncryptKey1);}catch (Exception ex) { throw ex; }return m_strEncrypt;}/// <summary>/// 3DES 解密(基于DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey1">密鑰一</param>/// <param name="DecryptKey2">密鑰二</param>/// <param name="DecryptKey3">密鑰三</param>/// <returns>returns</returns>public static string DES3Decrypt(string DecryptString, string DecryptKey1, string DecryptKey2, string DecryptKey3){string m_strDecrypt = "";try{m_strDecrypt = DESDecrypt(DecryptString, DecryptKey1);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey2);m_strDecrypt = DESDecrypt(m_strDecrypt, DecryptKey3);}catch (Exception ex) { throw ex; }return m_strDecrypt;}/// <summary>/// AES 加密(高級加密標準,是下一代的加密算法標準,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 算法)/// </summary>/// <param name="EncryptString">待加密密文</param>/// <param name="EncryptKey">加密密鑰</param>/// <returns></returns>public static string AESEncrypt(string EncryptString, string EncryptKey){if (string.IsNullOrEmpty(EncryptString)) { throw (new Exception("密文不得為空")); }if (string.IsNullOrEmpty(EncryptKey)) { throw (new Exception("密鑰不得為空")); }string m_strEncrypt = "";byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");Rijndael m_AESProvider = Rijndael.Create();try{byte[] m_btEncryptString = Encoding.Default.GetBytes(EncryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateEncryptor(Encoding.Default.GetBytes(EncryptKey), m_btIV), CryptoStreamMode.Write);m_csstream.Write(m_btEncryptString, 0, m_btEncryptString.Length); m_csstream.FlushFinalBlock();m_strEncrypt = Convert.ToBase64String(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_csstream.Close(); m_csstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_AESProvider.Clear(); }return m_strEncrypt;}/// <summary>/// AES 解密(高級加密標準,是下一代的加密算法標準,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 算法)/// </summary>/// <param name="DecryptString">待解密密文</param>/// <param name="DecryptKey">解密密鑰</param>/// <returns></returns>public static string AESDecrypt(string DecryptString, string DecryptKey){if (string.IsNullOrEmpty(DecryptString)) { throw (new Exception("密文不得為空")); }if (string.IsNullOrEmpty(DecryptKey)) { throw (new Exception("密鑰不得為空")); }string m_strDecrypt = "";byte[] m_btIV = Convert.FromBase64String("Rkb4jvUy/ye7Cd7k89QQgQ==");Rijndael m_AESProvider = Rijndael.Create();try{byte[] m_btDecryptString = Convert.FromBase64String(DecryptString);MemoryStream m_stream = new MemoryStream();CryptoStream m_csstream = new CryptoStream(m_stream, m_AESProvider.CreateDecryptor(Encoding.Default.GetBytes(DecryptKey), m_btIV), CryptoStreamMode.Write);m_csstream.Write(m_btDecryptString, 0, m_btDecryptString.Length); m_csstream.FlushFinalBlock();m_strDecrypt = Encoding.Default.GetString(m_stream.ToArray());m_stream.Close(); m_stream.Dispose();m_csstream.Close(); m_csstream.Dispose();}catch (IOException ex) { throw ex; }catch (CryptographicException ex) { throw ex; }catch (ArgumentException ex) { throw ex; }catch (Exception ex) { throw ex; }finally { m_AESProvider.Clear(); }return m_strDecrypt;}static void Main(string[] args){/*Console.WriteLine(MD5Encrypt("test"));//Console.WriteLine(MD5Decrypt(MD5Encrypt("test")));*/string str = DESEncrypt("test", "helloklk");Console.WriteLine(str);Console.WriteLine(str.Length);Console.WriteLine(DESEncrypt("test", "hellokkk").Length);Console.WriteLine(DESDecrypt(str, "helloklk"));Console.ReadLine();/* HashAlgorithm hash = HashAlgorithm.Create();Console.Write("Hash size:");Console.Write(hash.HashSize.ToString() + "bits");Console.WriteLine();byte[] data = { 200, 34, 12, 14, 210, 199, 172, 77, 88, 99 };byte[] hashBytes = hash.ComputeHash(data);Console.Write("Hash:" + BitConverter.ToString(hashBytes));Console.Read();*/}}
}
轉載于:https://www.cnblogs.com/jeffrey77/archive/2012/10/16/2725973.html
總結
以上是生活随笔為你收集整理的C#各种加密算法的研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python标准库10 多进程初步 (m
- 下一篇: 考完科一就可以自己约车练车了吗?