用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 可以在线验证。
希望能够帮到大家!
本文来自博客园,作者:酒醉后的疯言疯语,转载请注明原文链接:https://www.cnblogs.com/Andy-Blog/p/19015353