加密:RSA(C#)

RSA:非对称加密(公钥加密)

用途:

  1. 数据加密:公钥加密,私钥解密。私钥不用来加密的原因在于,公钥是公开的,私钥加密公钥解密时没有必要的。加密的明文和密文长度有限制。
  2. 数字签名:对数据摘要信息进行签名,以保证来源数据的正确性。实现上数据摘要一般是数据的hash值,MD5、SHA1等。

可见RSA一般很少用于较大数据的加密

密钥生成(公钥、私钥)

static void RSAGenKey(out string publicKey, out string privateKey)
{
    try
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        publicKey = rsa.ToXmlString(false);
        privateKey = rsa.ToXmlString(true);
    }
    catch (Exception e)
    {
        throw e;
    }
}

数据加密

加密的明文和密文长度有限制,加密明文长度有限制,加密明文长度有限制!

​
/// <summary>
/// 公钥加密
/// </summary>
/// <param name="str"></param>
/// <param name="publicKey"></param>
/// <returns></returns>
static string RSAEncrypt(string str, string publicKey)
{
    try
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.FromXmlString(publicKey);

        byte[] bytes = Encoding.UTF8.GetBytes(str);
        byte[] result = rsa.Encrypt(bytes, false);
        return Convert.ToBase64String(result);
    }
    catch (Exception e) {

        throw e;
    }
}

/// <summary>
/// 私钥解密
/// </summary>
/// <param name="str"></param>
/// <param name="privateKey"></param>
/// <returns></returns>
static string RSADecrypt(string str, string privateKey)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(privateKey);
    byte[] bytes = Convert.FromBase64String(str);
    byte[] result = rsa.Decrypt(bytes, false);
    return Encoding.UTF8.GetString(result);
}

数据签名

/// <summary>
/// 密钥对数据进行签名并返回
/// </summary>
/// <param name="str"></param>
/// <param name="privateKey"></param>
/// <returns></returns>
static string RSASign(string str, string privateKey)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(privateKey);
    HashAlgorithm algrithm = new MD5CryptoServiceProvider();
    var result = rsa.SignData(Encoding.UTF8.GetBytes(str), algrithm);
    return Convert.ToBase64String(result);
}

/// <summary>
/// 公钥对对数据及签名进行验证
/// </summary>
/// <param name="str"></param>
/// <param name="publicKey"></param>
/// <returns></returns>
static bool RSAVerify(string str, string publicKey, string key)
{
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    rsa.FromXmlString(publicKey);
    HashAlgorithm algrithm = new MD5CryptoServiceProvider();
    return rsa.VerifyData(Encoding.UTF8.GetBytes(str), algrithm, Convert.FromBase64String(key));
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值