c# 签名 java 验证_【转】C# RSA 加密,解密与签名,验证签名

本文介绍了如何使用C#进行RSA加密、解密,并使用BouncyCastle库实现签名与验证签名的过程,特别指出Java与C#中MD5与RSA算法的对应关系,以及SHA256withRSA的使用方法。
摘要由CSDN通过智能技术生成

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

使用的库 bouncycastle

加密解密

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

签名,验证签名

#region 加签

///

/// 基于BouncyCastle的RSA签名

///

///

///

/// JAVA的和.NET的不一样,如:MD5(.NET)等同于MD5withRSA(JAVA)

///

///

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 验签

///

/// 基于BouncyCastle的RSA签名

///

/// 源数据

///

/// base64签名

/// JAVA的和.NET的不一样,如:MD5(.NET)等同于MD5withRSA(JAVA)

///

///

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

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值