当前位置: 首页 > news >正文

用C# 实现标准MD5WithRSA算法

原文:用C# 实现标准MD5WithRSA算法 - _浮夸 - 博客园

 

 1 public class md5withRsa
 2     {
 3         public static Encoding encoding = Encoding.GetEncoding("GBK");
 4         public static string SignerSymbol = "MD5withRSA";
 5 
 6         public  md5withRsa() { }
 7 
 8         public  md5withRsa(Encoding e, string s)
 9         {
10             encoding = e;
11             SignerSymbol = s;
12         }
13 
14         private static AsymmetricKeyParameter CreateKEY(bool isPrivate, string key)
15         {
16             byte[] keyInfoByte = Convert.FromBase64String(key);
17 
18             if (isPrivate)
19                 return PrivateKeyFactory.CreateKey(keyInfoByte);
20             else
21                 return PublicKeyFactory.CreateKey(keyInfoByte);
22         }
23 
24         /// <summary>
25         /// 数据加密
26         /// </summary>
27         /// <param name="content">待加密字符串</param>
28         /// <param name="privatekey">私钥</param>
29         /// <returns>加密后字符串</returns>
30         public static string Sign(string content, string privatekey)
31         {
32             ISigner sig = SignerUtilities.GetSigner(SignerSymbol);
33 
34             sig.Init(true, CreateKEY(true, privatekey));
35 
36             var bytes = encoding.GetBytes(content);
37 
38             sig.BlockUpdate(bytes, 0, bytes.Length);
39             byte[] signature = sig.GenerateSignature();
40             
41             /* Base 64 encode the sig so its 8-bit clean */
42             var signedString = Convert.ToBase64String(signature);
43 
44             return signedString;
45         }
46 
47         /// <summary>
48         /// 验证签名
49         /// </summary>
50         /// <param name="content">待签名的字符串</param>
51         /// <param name="signData">加密后的文本</param>
52         /// <param name="publickey">公钥文本</param>
53         /// <returns>是否一致</returns>
54         public static bool Verify(string content, string signData, string publickey)
55         {
56             ISigner signer = SignerUtilities.GetSigner(SignerSymbol);
57 
58             signer.Init(false, CreateKEY(false, publickey));
59 
60             var expectedSig = Convert.FromBase64String(signData);
61 
62             /* Get the bytes to be signed from the string */
63             var msgBytes = encoding.GetBytes(content);
64 
65             /* Calculate the signature and see if it matches */
66             signer.BlockUpdate(msgBytes, 0, msgBytes.Length);
67             return signer.VerifySignature(expectedSig);
68         }
69     }

      这样,我们 通过 Sign()  方法加密,通过Verify()方法验证签名即可。

这里提供一组数据给大家验证:

私钥:MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJMr8NnRV7ve7Y5FEBium/TsU0fK5NvzvFpsYxPAQhBXY+EN0Bi2JEg790C1njk9Q3U36u2JBDHAiDIomlgh6wWkJsFn7dghV/fCWSX1VVJ+dRINZy1432fRaJ8GqspvMneBpeLjBe94IwlWKpN+AOR+BNX8QL/uHmfCPlVQXos9AgMBAAECgYAzqbMs434m50UBMmFKKNF6kxNRGnpodBFktLO7FTybu/HF6TFp21a1PMe5IYhfk5AAsBZ6OCUOygWFhhdYZN+5W+dweF3kp1rLE4y5CjwqNlk/g22TAndf9znh/ltHFLvITToqu/eh/34tE1gyNxRbsi1olw/1wv8ZRjM3vtM9QQJBANvNwFq+CJHUyFzkXQB7+ycQFnY8wDq8Uw2Hv9ZMjgIntH7FSlJtdu5mAYPPo6f74slO5tFUMNP7EVppqsjYaNkCQQCraD6iKHo+OIlvvYIKiMXatJGD7N1GNhq5CrhUNPWLHwv/Ih2D3JJdF8IUZOPIJfUxTfM2fZYI+EVdsv6s4RcFAkAGjNYbnighOGcUJZYD6q3sVxVkRqEv3ubWs2HrH/Lna4l8caKqXCq8JfwLkod8/QugFiLYwBqIZqX4vMdjHtfZAkBsAl9dbWZCaPvpxp/4JWGPxDLhz9NLV/KU4bVvkoObq++yUHwKyGYOdVcd5MlIKOsNq5Hzp0Vw14lWVuF2bMxFAkBuNrZksvUULNIaWDKd4rQ6GVzUxXuIZW0ZE6atHYDiXPB4jVAjKRtLxZAV1qH9cr1zNJlcg+RbGYUdF9t4A9n5
公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTK/DZ0Ve73u2ORRAYrpv07FNHyuTb87xabGMTwEIQV2PhDdAYtiRIO/dAtZ45PUN1N+rtiQQxwIgyKJpYIesFpCbBZ+3YIVf3wlkl9VVSfnUSDWcteN9n0WifBqrKbzJ3gaXi4wXveCMJViqTfgDkfgTV/EC/7h5nwj5VUF6LPQIDAQAB
"中国China"
签名结果:YrzYdPFG0yomJFcM4RbO7WCyrn3LgYpG52f0TVbj1palYwD1y7YI+VJJ+G4xfTvtaXZ7cWCAbTH8j/8WwGUjyJpG5vDkKJzkD8JR1YADaAGMsL43Weeeovj+FjDHt/vLtkJ8cHnJAxAgIilFCENf9X8XlMGbvH2tJ0mYhZat55U=

 还有一个可以在线进行 md5withRsa 加密验签的网站:www.yunsos.com/Md5WithRSA.aspx  可以在线验证。

 希望能够帮到大家!

http://www.sczhlp.com/news/2381/

相关文章:

  • 操作系统引导过程详解:从开机到进入系统的每一步
  • linux系统中查询中间件进程的for命令 - 一叶舟
  • Docker容器运行Windows11
  • 全局平衡二叉树
  • pygame小游戏打飞机_5多个敌人
  • 贪心算法
  • inux系统中查询中间件进程的for命令.19015328 - 一叶舟
  • 6.1.1 随机访问存储器
  • 垃圾邮件过滤的算法与技术:深入解析贝叶斯过滤与机器学习模型
  • 【完结13章】人工智能Ai Agent RAG云服务器python后端零基础实战课
  • 面经学习-HTTP优化
  • .NTE开发【库位保存和回显默认值】
  • tryhackme--creative靶场wp
  • 多种数据库混合查询
  • Windows下安装部署多个Nginx
  • ceph:网络上的人真的是习惯于“以讹传讹”:从ceph -s的状态经过信息【mons are allowing insecure global_id reclaim】说起
  • 【原创】python http标准库搭建服务器解析php脚本
  • 「Tekla Structures 2024 下载安激活详细步骤,含China环境+本地许可证配置全流程」
  • linux系统中history增加时间戳.18920467 - 一叶舟
  • 锚框 anchor box
  • 多分支注意力机制提升表格数据建模效果
  • IntelliJ IDEA的安装与配置
  • 比特彗星常见问题-分块校验失败问题
  • cpp选手的python速成指南
  • [题解]P9598 [JOI Open 2018] 山体滑坡 / Collapse
  • 使用CredSniper窃取红队行动中的2FA令牌
  • 软件无线电处理卡设计原理图:227-基于Kintex-7 XC7K325T的FMC USB3.0四路光纤数据转发卡
  • Ubuntu 命令
  • Spring中的事务是如何实现的
  • PADS学习笔记--关于layout