C#自定义RSA加密解密及RSA签名和验证类示例

分类:知识百科 日期: 点击:0

RSA加密解密是一种常用的非对称加密算法,它的名字来源于它的发明者Rivest,Shamir和Adleman,它是一种非常安全的加密算法,它的特点是公钥和私钥不能互换,只有拥有私钥的人才能解开加密的信息。在C#中,我们可以使用自定义RSA加密解密及RSA签名和验证类来实现RSA的加密解密和签名验证。

使用方法

1. 需要在C#项目中添加自定义RSA加密解密及RSA签名和验证类。

using System;
using System.Security.Cryptography;
using System.Text;
 
namespace MyRSA
{
    /// 
    /// 自定义RSA加密解密及RSA签名和验证类
    /// 
    public class MyRSA
    {
        //RSA密钥对
        private RSAParameters _privateKey;
        private RSAParameters _publicKey;
 
        /// 
        /// 构造函数
        /// 
        public MyRSA()
        {
            //生成公钥和私钥
            GenerateKeys();
        }
 
        /// 
        /// 生成公钥和私钥
        /// 
        private void GenerateKeys()
        {
            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.PersistKeyInCsp = false;
                _publicKey = rsa.ExportParameters(false);
                _privateKey = rsa.ExportParameters(true);
            }
        }
    }
}

2. 设置公钥和私钥:

public void SetKeys(string publicKey, string privateKey)
{
    //将字符串转换成可用的RSA参数
    _publicKey = MyRSA.ConvertFromPublicKey(publicKey);
    _privateKey = MyRSA.ConvertFromPrivateKey(privateKey);
}

3. RSA加密:

/// 
/// RSA加密
/// 
/// 需要加密的内容
/// 公钥
/// 加密后的字符串
public string Encrypt(string content, string publicKey)
{
    var key = ConvertFromPublicKey(publicKey);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(key);
        var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
        return Convert.ToBase64String(cipherbytes);
    }
}

4. RSA解密:

/// 
/// RSA解密
/// 
/// 需要解密的内容
/// 私钥
/// 解密后的字符串
public string Decrypt(string content, string privateKey)
{
    var key = ConvertFromPrivateKey(privateKey);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(key);
        var cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
        return Encoding.UTF8.GetString(cipherbytes);
    }
}

5. RSA签名:

/// 
/// RSA签名
/// 
/// 需要签名的内容
/// 私钥
/// 签名后的字符串
public string SignData(string content, string privateKey)
{
    var key = ConvertFromPrivateKey(privateKey);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(key);
        var data = Encoding.UTF8.GetBytes(content);
        var signData = rsa.SignData(data, new SHA1CryptoServiceProvider());
        return Convert.ToBase64String(signData);
    }
}

6. RSA验证:

/// 
/// RSA验证
/// 
/// 需要验证的内容
/// 签名字符串
/// 公钥
/// true:验证成功 false:验证失败
public bool VerifyData(string content, string signData, string publicKey)
{
    var key = ConvertFromPublicKey(publicKey);
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(key);
        var data = Encoding.UTF8.GetBytes(content);
        var signBytes = Convert.FromBase64String(signData);
        return rsa.VerifyData(data, new SHA1CryptoServiceProvider(), signBytes);
    }
}

使用上述方法,可以很方便的在C#项目中实现RSA加密解密及RSA签名和验证。


标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。