1. 程式人生 > >C# RSACryptoServiceProvider 加密解密 RSA 加密解密

C# RSACryptoServiceProvider 加密解密 RSA 加密解密

根據 代碼 code amp false 不同 Coding sum omx

  什麽是RSA:RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰解密密鑰,是一種“由已知加密密鑰 推導出 解密密鑰在計算上是不可行的”密碼體制。

下附代碼,在控制臺中粘貼在啟動類即可使用,需引用(using System.Security.Cryptography)命名空間 ;

     /// <summary>
        /// 獲取加密所使用的key,RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
        /// </summary>
        public static void
GetKey() { string PublicKey = string.Empty; string PrivateKey = string.Empty; RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider(); PublicKey = rSACryptoServiceProvider.ToXmlString(false); // 獲取公匙,用於加密 PrivateKey = rSACryptoServiceProvider.ToXmlString(true
); // 獲取公匙和私匙,用於解密 //Console.WriteLine("PublicKey is {0}", PublicKey); // 輸出公匙 //Console.WriteLine("PrivateKey is {0}", PrivateKey); // 輸出密匙 // 密匙中含有公匙,公匙是根據密匙進行計算得來的。 using (StreamWriter streamWriter = new StreamWriter("PublicKey.xml")) { streamWriter.Write(rSACryptoServiceProvider.ToXmlString(
false));// 將公匙保存到運行目錄下的PublicKey } using (StreamWriter streamWriter = new StreamWriter("PrivateKey.xml")) { streamWriter.Write(rSACryptoServiceProvider.ToXmlString(true)); // 將公匙&私匙保存到運行目錄下的PrivateKey } }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="str">需要加密的明文</param>
        /// <returns></returns>
        private static byte[] Encryption(string str)
        {
            RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
            using (StreamReader streamReader = new StreamReader("PublicKey.xml")) // 讀取運行目錄下的PublicKey.xml
            {
                rSACryptoServiceProvider.FromXmlString(streamReader.ReadToEnd()); // 將公匙載入進RSA實例中
            }
            byte[] buffer = Encoding.UTF8.GetBytes(str); // 將明文轉換為byte[]

            // 加密後的數據就是一個byte[] 數組,可以以 文件的形式保存 或 別的形式(網上很多教程,使用Base64進行編碼化保存)
            byte[] EncryptBuffer = rSACryptoServiceProvider.Encrypt(buffer, false); // 進行加密

            //string EncryptBase64 = Convert.ToBase64String(EncryptBuffer); // 如果使用base64進行明文化,在解密時 需要再次將base64 轉換為byte[]
            //Console.WriteLine(EncryptBase64);
            return EncryptBuffer;
        }

        private static string Decrypt(byte[] buffer)
        {
            RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
            using (StreamReader streamReader = new StreamReader("PrivateKey.xml")) // 讀取運行目錄下的PrivateKey.xml
            {
                rSACryptoServiceProvider.FromXmlString(streamReader.ReadToEnd()); // 將私匙載入進RSA實例中
            }
            // 解密後得到一個byte[] 數組
            byte[] DecryptBuffer = rSACryptoServiceProvider.Decrypt(buffer, false); // 進行解密
            string str = Encoding.UTF8.GetString(DecryptBuffer); // 將byte[]轉換為明文

            return str;
        }

C# RSACryptoServiceProvider 加密解密 RSA 加密解密