加密key與解密key不是一個,而是一對
加密key與解密key是不能互相推導的,有密文,沒有解密key也推導不出來原文
加密解密速度慢,但是安全性好
特點:
公開解密key,保證數據的安全傳遞
公開機密key,保證數據的不可抵賴
code:
/// <summary> /// 獲取非對稱的這對密鑰 /// </summary> /// <returns></returns> public static KeyValuePair<string, string> GetKeyPair() { RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); return new KeyValuePair<string, string>(RSA.ToXmlString(false), RSA.ToXmlString(true)); } /// <summary> /// 加密 /// </summary> /// <param name="content">內容</param> /// <param name="key">密鑰</param> /// <returns></returns> public static string Encrypt(string content, string key) { RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSA.FromXmlString(key); UnicodeEncoding unicodeEncoding = new UnicodeEncoding(); byte[] DataToEncrypt = unicodeEncoding.GetBytes(content); byte[] resultBytes = RSA.Encrypt(DataToEncrypt, false); return Convert.ToBase64String(resultBytes); } /// <summary> /// 解密 內容加解密key /// </summary> /// <param name="content"></param> /// <param name="key"></param> /// <returns></returns> public static string Decryp(string content, string key) { byte[] DataToEncrypt = Convert.FromBase64String(content); RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSA.FromXmlString(key); byte[] resultBytes = RSA.Decrypt(DataToEncrypt, false); return Encoding.UTF8.GetString(resultBytes); }
static void Main(string[] args) { //獲得加密解密鍵值對 KeyValuePair<string, string> keyValuePair = ReaEncrypt.GetKeyPair(); //加密 string rsaEnl = ReaEncrypt.Encrypt("ok", keyValuePair.Key); //解密 string rsadDel = ReaEncrypt.Decryp(rsaEnl, keyValuePair.Value); Console.WriteLine("Hello World!"); }