C# -- RSA加密与解密


1.  RSA加密与解密  --  使用公钥加密、私钥解密

    public class RSATool
    {
        public string Encrypt(string strText, string strPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(strPublicKey);

            byte[] byteText = Encoding.UTF8.GetBytes(strText);
            byte[] byteEntry = rsa.Encrypt(byteText, false);

            return Convert.ToBase64String(byteEntry);
        }


        public string Decrypt(string strEntryText,string strPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(strPrivateKey);

            byte[] byteEntry = Convert.FromBase64String(strEntryText);
            byte[] byteText = rsa.Decrypt(byteEntry, false);

            return Encoding.UTF8.GetString(byteText);
        }

        public Dictionary<string,string> GetKey()
        {
            Dictionary<string, string> dictKey = new Dictionary<string, string>();
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

            dictKey.Add("PublicKey", rsa.ToXmlString(false));
            dictKey.Add("PrivateKey", rsa.ToXmlString(true));

            return dictKey;
        }
    }

测试:

            RSATool myRSA = new RSATool();
            Dictionary<string, string> dictK = new Dictionary<string, string>();
            dictK = myRSA.GetKey();

            string strText = "123456";
            Console.WriteLine("要加密的字符串是:{0}", strText);

            string str1 = myRSA.Encrypt("123456", dictK["PublicKey"]);
            Console.WriteLine("加密后的字符串:{0}", str1);

            string str2 = myRSA.Decrypt(str1, dictK["PrivateKey"]);
            Console.WriteLine("解密后的字符串:{0}", str2);

2.  RSA加密与解密  --  使用同一个密钥容器进行加密与解密

    public class RSAToolX
    {
        public string Encrypt(string strText)
        {
            CspParameters CSApars = new CspParameters();
            CSApars.KeyContainerName = "Test001";

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);

            byte[] byteText = Encoding.UTF8.GetBytes(strText);
            byte[] byteEntry = rsa.Encrypt(byteText, false);

            return Convert.ToBase64String(byteEntry);
        }


        public string Decrypt(string strEntryText)
        {
            CspParameters CSApars = new CspParameters();
            CSApars.KeyContainerName = "Test001";

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);

            byte[] byteEntry = Convert.FromBase64String(strEntryText);
            byte[] byteText = rsa.Decrypt(byteEntry, false);

            return Encoding.UTF8.GetString(byteText);
        }
    }

测试 :

            RSAToolX myRSA = new RSAToolX();

            string strText = "123456";
            Console.WriteLine("要加密的字符串是:{0}", strText);

            string str1 = myRSA.Encrypt("123456");
            Console.WriteLine("加密后的字符串:{0}", str1);

            string str2 = myRSA.Decrypt(str1);
            Console.WriteLine("解密后的字符串:{0}", str2);

C