C#使用RSA非对称加密字符串 附Helper帮助类

2020-09-21 17:46:18后端技术围观数:9553 点赞数:954

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
C#使用RSA加密算法重要的一个类就是RSACryptoServiceProvider,这个类可以生成一对公钥和私钥,同时也可以加密和解密。

生成privatekey代码:

System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
var privatekey=rsa.ToXmlString(true);

生成publickey代码:

System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
var publickey=rsa.ToXmlString(false);

完整Helper帮助类代码:

public class RSAEncryption
    {
        public static readonly string publickey = @"生成的publickey";
        public static readonly string privatekey = @"生成的privatekey";
        /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="publickey"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string RSAEncrypt(string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(publickey);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
            return Convert.ToBase64String(cipherbytes);
        }

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="privatekey"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static bool RSADecrypt(string content, out string rslt)
        {
            try
            {
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                byte[] cipherbytes;
                rsa.FromXmlString(privatekey);
                cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
                rslt = Encoding.UTF8.GetString(cipherbytes);
                return true;
            }
            catch (System.Security.Cryptography.CryptographicException e1)
            {
                rslt = "";
                return false;
            }
        }
    }

转载请说明出处:博客微站原文链接:

标签:Asp.NetC#

相关阅读:

asp.net 内置委托 Action 和 Func 和 Predicate

vs生成成功但发布时报错 未能将文件...复制到... 未能找到文件...

FluentData 报错 Error:Could not map ...字段名