C#实现RSA签名及认证
2023-09-11 14:21:57 时间
C#实现RSA签名及认证
/// <summary>
/// 签名
/// </summary>
/// <param name="str">需签名的数据</param>
/// <returns>签名后的值</returns>
public string Sign(string str, string str_privateKey) {
//根据需要加签时的哈希算法转化成对应的hash字符节
byte[] bt = Encoding.GetEncoding("utf-8").GetBytes(str);
var sha256 = new SHA256CryptoServiceProvider();
byte[] rgbHash = sha256.ComputeHash(bt);
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(str_privateKey);
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key);
formatter.SetHashAlgorithm("SHA256"); //此处是你需要加签的hash算法,需要和上边你计算的hash值的算法一致,不然会报错。
byte[] inArray = formatter.CreateSignature(rgbHash);
return Convert.ToBase64String(inArray);
}
/// <summary>
/// 签名验证
/// </summary>
/// <param name="str">待验证的字符串</param>
/// <param name="sign">加签之后的字符串</param>
/// <returns>签名是否符合</returns>
public bool SignCheck(string str, string sign, string str_publicKey){
try{
byte[] bt = Encoding.GetEncoding("utf-8").GetBytes(str);
var sha256 = new SHA256CryptoServiceProvider();
byte[] rgbHash = sha256.ComputeHash(bt);
RSACryptoServiceProvider key = new RSACryptoServiceProvider();
key.FromXmlString(str_publicKey);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(key);
deformatter.SetHashAlgorithm("SHA256");
byte[] rgbSignature = Convert.FromBase64String(sign);
if (deformatter.VerifySignature(rgbHash, rgbSignature)){
return true;
}
return false;
}
catch{
return false;
}
}
相关文章
- C#子线程中更新ui-----c# 多线程多文件批量下载
- [C#] c# 验证手机号码 最新的17手机号
- C#.NET常见问题(FAQ)-如何把写好的类编译成dll文件
- C#基础视频教程7.1 如何编写简单游戏
- C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
- C# 文件读写操作整理
- 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]
- c# 后端与前端时间戳的转换
- C# 识别url是否是网络路径
- C# - 多线程 之 进程与线程
- C#获取外网IP、本机MAC地址及Ping的实现
- C# 获取Excel工作薄中Sheet页(工作表)名集合
- C# 使用LINQ、泛型、Index函数优化switch(或者多条if)语句
- paip.java c# .net php python调用c++ c dll so windows api 总结
- C# Oracle、Sql Server连接(增、删、改、查)
- C# CHM帮助文档
- C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword)
- C# 学习笔记(三)----- 设备监视 ( System.Management )
- [C#]c#中数据的同步加锁机制 的几种方法
- C# .net 子类序列化时无法识别的解决办法