前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >C# RSA 加密,解密与签名,验证签名

C# RSA 加密,解密与签名,验证签名

作者头像
jgrass
发布2024-12-25 16:36:49
发布2024-12-25 16:36:49
14000
代码可运行
举报
文章被收录于专栏:蔻丁杂记蔻丁杂记
运行总次数:0
代码可运行

这是一篇转载合并文章,主要内容来自一下两篇:

使用的库 bouncycastle

加密解密

加密解密相关的代码,见:

  • 第一篇博客的代码整理

https://gist.github.com/JasonGrass/b773dd4fca392abe86f582876b6f470c

  • 加密解密2

C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥、一般模式【支持公钥加密,私钥解密】(一) - kevin860 - 博客园

签名,验证签名

代码语言:javascript
代码运行次数:0
复制
#region 加签/// <summary>/// 基于BouncyCastle的RSA签名/// </summary>/// <param name="data"></param>/// <param name="privateKeyJava"></param>/// <param name="hashAlgorithm">JAVA的和.NET的不一样,如:MD5(.NET)等同于MD5withRSA(JAVA)</param>/// <param name="encoding"></param>/// <returns></returns>public static string RSASignJavaBouncyCastle(string data, string privateKeyJava, string hashAlgorithm = "MD5withRSA", string encoding = "UTF-8"){    RsaKeyParameters privateKeyParam = (RsaKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKeyJava));    ISigner signer = SignerUtilities.GetSigner(hashAlgorithm);    signer.Init(true, privateKeyParam);//参数为true验签,参数为false加签    var dataByte = Encoding.GetEncoding(encoding).GetBytes(data);    signer.BlockUpdate(dataByte, 0, dataByte.Length);    //return Encoding.GetEncoding(encoding).GetString(signer.GenerateSignature()); //签名结果 非Base64String    return Convert.ToBase64String(signer.GenerateSignature());}#endregion
#region 验签/// <summary>/// 基于BouncyCastle的RSA签名/// </summary>/// <param name="data">源数据</param>/// <param name="publicKeyJava"></param>/// <param name="signature">base64签名</param>/// <param name="hashAlgorithm">JAVA的和.NET的不一样,如:MD5(.NET)等同于MD5withRSA(JAVA)</param>/// <param name="encoding"></param>/// <returns></returns>public static bool VerifyJavaBouncyCastle(string data, string publicKeyJava, string signature, string hashAlgorithm = "MD5withRSA", string encoding = "UTF-8"){    RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyJava));    ISigner signer = SignerUtilities.GetSigner(hashAlgorithm);    signer.Init(false, publicKeyParam);    byte[] dataByte = Encoding.GetEncoding(encoding).GetBytes(data);    signer.BlockUpdate(dataByte, 0, dataByte.Length);    //byte[] signatureByte = Encoding.GetEncoding(encoding).GetBytes(signature);// 非Base64String    byte[] signatureByte = Convert.FromBase64String(signature);    return signer.VerifySignature(signatureByte);}

hash 算法如果使用 SHA256,则使用 SHA256withRSA

C# 原生自带的类,不支持 OpenSSL 生成的密钥。

rsa - C# 如何使用OpenSSL生成的公钥秘钥对进行加密解密? - SegmentFault 思否

原文链接: https://cloud.tencent.com/developer/article/2481501

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年5月11日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加密解密
  • 签名,验证签名
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档