RSA非对称加密使用示例

RSA非对称加密使用公钥、私钥两种密钥,规则上通过私钥可以生成公钥(相当于有了私钥基本上也能有公钥)。

公钥用来加密、验证签名;

私钥用来解密、签名数据(私钥不能用于加密)

数字证书是包含公钥以及身份信息的文件,且经过颁发机构的私钥签名认证。(本例中不涉及)

//构建包含非对称密钥对的RSA对象实体,密钥随机(每次构建的密钥都不相同)
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(1024);
//签名字节数据:先用指定哈希算法计算哈希值,然后对哈希值签名
byte[] signature = rsa.SignData(data, System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));
//验证签名:用指定哈希算法计算数据哈希值,然后用公钥解出私钥签名后的数据进行核对
bool r = rsa.VerifyData(data, System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"), signature);

//以上可自行分步操作如下:
System.Security.Cryptography.SHA256Managed sha = new System.Security.Cryptography.SHA256Managed();
//计算哈希值
byte[] hash = sha.ComputeHash(data);
//签名哈希值
byte[] hashSignature = rsa.SignHash(hash, System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"));
//验证哈希值签名
bool rh = rsa.VerifyHash(hash, System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"), hashSignature);
//验证数据签名
bool r2=rsa.VerifyData(data, System.Security.Cryptography.CryptoConfig.MapNameToOID("SHA256"), hashSignature);
/*注意:以上分步操作要提供相同的哈希算法,否则无法通过验证*/

//加密数据
byte[] encryptedData = rsa.Encrypt(data, false);
//解密数据
byte[] myData=rsa.Decrypt(encryptedData,false);

//获取公钥字符串形式数据
string publicKey = rsa.ToXmlString(false);           
//获取密钥对的字符串形式数据(包含公钥、私钥)
string keyPair= rsa.ToXmlString(true);

/*可通过密钥字符串数据重新初始化RSA对象,使RSA对象变成指定密钥的载体*/
//将公钥导入到RSA对象中(只能加密或验证签名)
rsa.FromXmlString(publicKey);
//将公钥、私钥都导入到RSA对象(可以进行所有操作)
rsa.FromXmlString(keyPair);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzl_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值