C#使用RSA加密字符串示例

RSA加/解密类EncryptHelpr:

using System;
using System.Security.Cryptography;
using System.Text;

namespace Library
{
    public class EncryptHelpr
    {
        private static readonly string publickey = "<RSAKeyValue><Modulus>3aCH4xP82iontja5TQKyYU+GOpUsGN+uKL8oaoji5TC1iB3qK2zXojxuNRotC8p7QVLj4vH5RLkD9re1O0KmmPXmhudOe0ZG9XfvmPrE/zHiWLv4u/jx79n7WJ3wR0eKpHxzJ3BvEd9LA2+fCc5vNaoPbJqt9TZb9C7P8NRXmwc=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
        private static readonly string privatekey = "<RSAKeyValue><Modulus>3aCH4xP82iontja5TQKyYU+GOpUsGN+uKL8oaoji5TC1iB3qK2zXojxuNRotC8p7QVLj4vH5RLkD9re1O0KmmPXmhudOe0ZG9XfvmPrE/zHiWLv4u/jx79n7WJ3wR0eKpHxzJ3BvEd9LA2+fCc5vNaoPbJqt9TZb9C7P8NRXmwc=</Modulus><Exponent>AQAB</Exponent><P>+Lfc3IC7dZNxSiTpVAUOr9M5sPpyMbc7zrshFtRTWgdKyGVChywpXGs1ZtrVhZxQ5GkmRumrYQWrpd8dNtwcqw==</P><Q>5B2e343rQRuXx3JdltD8zShhEaI7M0ZbV55sfWY8Wrm7GIZGKpDRgLadC+d9wyXkn2XWYL4EsBjfljNNGVnDFQ==</Q><DP>J4t0Pkrpg0QyGwvLXWSAdUwsPAtV5LmxdKkkFbEkn4fRSBNxhHRtDxisoPHiSSAVbHubbmLwsLhqFjFnP7W3iQ==</DP><DQ>imEdm2ewKpLeg/Lwqyij8qBoIhZT60rm5kQIdBmsyyyYPsxVjETFkls08Z/APr2h7sAMSCt9FIZCPA9q2dIF8Q==</DQ><InverseQ>jtsK5aykDk5KxVT8ltGvuJqy5R/UyJ3nWthpuwp8Vh1zsyfvHbu8u9NeVdQ9G6icMIuveLktLhS1uGwCAqqh+Q==</InverseQ><D>BkejMhMB6iihoW8hhwYZidpYAlbxve6wn6Ty/znLvBTKQAYg+YQHBCjUMpsARcJCBdLUdDzJBGJ9s0L3VquHzuY97mQWVe6Prnoj7IdZDPzGQQHM0vjsRosofXlT9dSp892SVTQwFajRA/tWQbG9+jAbSVDIj7MDb3LZXfNmhUk=</D></RSAKeyValue>";

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Encrypt(string data)
        {
            return Encrypt(data, Encoding.UTF8);
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="data"></param>
        /// <param name="encode"></param>
        /// <returns></returns>
        public static string Encrypt(string data, Encoding encode)
        {
            byte[] dataByteArray = encode.GetBytes(data);
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(publickey);
            byte[] encrypt = provider.Encrypt(dataByteArray, false);
            return Convert.ToBase64String(encrypt);
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Decrypt(string data)
        {
            return Decrypt(data, Encoding.UTF8);
        }

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="data"></param>
        /// <param name="encode"></param>
        /// <returns></returns>
        public static string Decrypt(string data, Encoding encode)
        {
            byte[] dataByteArray = Convert.FromBase64String(data);
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(privatekey);
            byte[] decrypt = provider.Decrypt(dataByteArray, false);
            return encode.GetString(decrypt);
        }
    }
}

调用示例:

string str = EncryptHelpr.Encrypt("http://www.mzwu.com/");
Console.WriteLine(str);
Console.WriteLine(EncryptHelpr.Decrypt(str));

说明:相同字符串相同公钥RSA每次生成的结果不一样!

常见问题

问:怎么生成RSA公钥和密钥?
答:RSA公钥和密钥生成方法如下:
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
string publickey = provider.ToXmlString(false);
string privatekey = provider.ToXmlString(true);


上一篇: 批处理参数%1-%9增强语法
下一篇: C#通过域名查询服务器ip
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 4589
发表评论
登录后再发表评论!