专栏首页小神仙RSA签名和验证数据

RSA签名和验证数据

 1         private const string PubKey = "BgIAAACkAABSU0ExAAQAAAEAAQAxg/L6l3AyA+Zd7Hm7ESCcS4CcgY8PvwE2arRvTbfI4+z6zPJaDkOyho9X6owIwceN9zXH5XNsAmEVYBkgmwdX5r5g8iymKywYSaVpt1FDUHRkGY39NuDVsbVJ/1DW15TTVeYLalbtOOb0h61pnaW9FgQNaYMMZSWPO8UZ9hPepw==";
 2 
 3         private const string PriKey = "BwIAAACkAABSU0EyAAQAAAEAAQAxg/L6l3AyA+Zd7Hm7ESCcS4CcgY8PvwE2arRvTbfI4+z6zPJaDkOyho9X6owIwceN9zXH5XNsAmEVYBkgmwdX5r5g8iymKywYSaVpt1FDUHRkGY39NuDVsbVJ/1DW15TTVeYLalbtOOb0h61pnaW9FgQNaYMMZSWPO8UZ9hPep+flgoHIqqmP8wwg4XY1KWHUXequmSryPkIpgcSs9EEVGZbxI8ai8i+OlpNH/1a6lmjyQzMzIK1sJ/5WubRFjMon+6iPki2vxviqxQeODX/yNRPglWsTLjzPiVxrPaNan++rAKWBBodsspaU+MZyYt4QT/AXzTi62OB2srB23SrUc89OqR9T7fhnFkfj/AymDqgEEI2JliQPGttj9ycx2e/bCllPISn5BP3Vcq6slUMk05YM/4+BVB/goTCrdXsbJAEoCtGAfkRBzldhHFtw5/vd49anfedXLFQcpkfGJbMVaO9deS6HyMBZ+XqS/6zxUJL2m3n6gKL5bgoCtqqdSYGAR4Hdrt0lWTfnscXauHDZ12FdzSp3egTDSROmEXHoogNhibz3Q0t6nNpwcoBjxCwZnz2Ej1hW84UpTnYN8ixAQbksoAprGCshxUo7x6NAXx/FaO8vxrwPliI8pAcDOJ3Z/JUKhfquRjINsg4DYTxxhEtpynBznRhrKpyifggiRvqeBITpcLpgP83dhEdz8Bf18MJw7lX9usEiX5XighQ0iABVtxTu7dBgIHWNTH6gVUWqe87yguFrfj4OA++CBYM=";
 4         static void Main(string[] args)
 5         {
 6             var aa = "123456";
 7             var e = SignData(aa,PriKey);
 8             var dd = VerifySerialNum(aa, e, PubKey);
 9         }
10 
11         /// <summary>
12         /// RSA签名数据
13         /// </summary>
14         /// <param name="input">要签名的数据</param>
15         /// <param name="priKey">base64编码的私钥</param>
16         /// <returns>签名后数据的base64字符串</returns>
17         public static string SignData(string input,string priKey)
18         {
19             try
20             {
21                 using (var rsa = new RSACryptoServiceProvider(1024))
22                 {
23                     rsa.ImportCspBlob(Convert.FromBase64String(priKey));
24                     var data = Encoding.UTF8.GetBytes(input);
25                     return Convert.ToBase64String(rsa.SignData(data, new SHA1CryptoServiceProvider()));
26                 }
27             }
28             catch (Exception)
29             {
30                 return string.Empty;
31             }
32         }
33 
34         ///  <summary>
35         /// 验证数据
36         ///  </summary>
37         ///  <param name="input">签名前数据</param>
38         ///  <param name="serialNum">SHA1签名后数据base64编码字符串</param>
39         ///  <param name="pubKey">base64编码的公钥</param>
40         ///  <returns></returns>
41         public static bool VerifySerialNum(string input, string serialNum, string pubKey)
42         {
43             try
44             {
45                 //导入公钥
46                 using (var rsa = new RSACryptoServiceProvider(1024))
47                 {
48                     rsa.ImportCspBlob(Convert.FromBase64String(pubKey));
49                     return rsa.VerifyData(Encoding.UTF8.GetBytes(input), new SHA1CryptoServiceProvider(),
50                         Convert.FromBase64String(serialNum));
51                 }
52             }
53             catch (Exception)
54             {
55                 return false;
56             }
57         }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#zip压缩类

    改造了网上的代码,可以压缩文件夹、指定文件列表(文件和文件夹的混合列表,需要指定子文件夹下需要压缩的文件),注释很详细不做解释

    用户6362579
  • Vue+abp微信扫码登录

    最近系统中要使用微信扫码登录,根据微信官方文档和网络搜索相关文献实现了。分享给需要的人,也作为自己的一个笔记。后端系统是基于ABP的,所以部分代码直接使用了ab...

    用户6362579
  • 网站搜索框使用微信扫码

    客户要求可以直接识别标签二维码对某些仪器设备进行管理,类似于淘宝搜索框可以直接拍照搜索商品一样。前面已经做了一个网页调用摄像头识别二维码的功能,此功能有两个缺陷...

    用户6362579
  • Windows中Python与OpenCV C++之间Mat传递

    将stdafx.h、targetver.h、dllmain.cpp、MyDLL.cpp、stdafxc.pp删除。

    superhua
  • 实现一个简单的Burp验证码本地识别插件

    为什么要写一个这个东西呢?虽然现在好多大网站都不用图片验证码了,但是仍然有一部分陈旧的web系统用着一些简单的图片验证码。当遇到带有验证码,而验证码的形式又非常...

    FB客服
  • 探索两种优雅的表单验证

    用户1203875
  • Git分支和版本回退

    这个过程中,下一个版本会记录一个parent id,这个parent id就是前一个版本的commit id。

    李红
  • Git分支和版本回退

    这个过程中,下一个版本会记录一个parent id,这个parent id就是前一个版本的commit id。

    李红
  • 实测火到禁的一键脱衣AI:过程一波三折,效果emmm……

    可是,在广大用户的热情包围之下,它并没有活过5天,是官方团队亲手下架的。原因是用户过多,风险难以控制。

    量子位
  • 设计模式之命令模式(一)

    在本次学习过程中,我们把封装带到一个全新的境界:把方法调用(method invocation)封装起来。没错,通过封装方法调用,我们可以把运算块包装成形。

    程序员小跃

扫码关注云+社区

领取腾讯云代金券