非對稱可逆加密RSA

加密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!");
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章