用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  可以在线验证。

 希望能够帮到大家!

posted @ 2025-07-31 15:45  酒醉后的疯言疯语  阅读(15)  评论(0)    收藏  举报