看到網上 很多用C# 實現MD5WithRSA算法,都是使用的 證書,通過加載證書 和證書密碼加密。
但是實際中,我們也有通過 密鑰加密的情況,如是找了很久 終於找到方法,首先要下載一個 BouncyCastle.Crypto.dll 。
話不多說,貼代碼:
public class md5withRsa
{
public static Encoding encoding = Encoding.GetEncoding("GBK"); public static string SignerSymbol = "MD5withRSA"; public md5withRsa() { } public md5withRsa(Encoding e, string s) { encoding = e; SignerSymbol = s; } private static AsymmetricKeyParameter CreateKEY(bool isPrivate, string key) { byte[] keyInfoByte = Convert.FromBase64String(key); if (isPrivate) return PrivateKeyFactory.CreateKey(keyInfoByte); else return PublicKeyFactory.CreateKey(keyInfoByte); } /// <summary> /// 數據加密 /// </summary> /// <param name="content">待加密字符串</param> /// <param name="privatekey">私鑰</param> /// <returns>加密后字符串</returns> public static string Sign(string content, string privatekey) { ISigner sig = SignerUtilities.GetSigner(SignerSymbol); sig.Init(true, CreateKEY(true, privatekey)); var bytes = encoding.GetBytes(content); sig.BlockUpdate(bytes, 0, bytes.Length); byte[] signature = sig.GenerateSignature(); /* Base 64 encode the sig so its 8-bit clean */ var signedString = Convert.ToBase64String(signature); return signedString; } /// <summary> /// 驗證簽名 /// </summary> /// <param name="content">待簽名的字符串</param> /// <param name="signData">加密后的文本</param> /// <param name="publickey">公鑰文本</param> /// <returns>是否一致</returns> public static bool Verify(string content, string signData, string publickey) { ISigner signer = SignerUtilities.GetSigner(SignerSymbol); signer.Init(false, CreateKEY(false, publickey)); var expectedSig = Convert.FromBase64String(signData); /* Get the bytes to be signed from the string */ var msgBytes = encoding.GetBytes(content); /* Calculate the signature and see if it matches */ signer.BlockUpdate(msgBytes, 0, msgBytes.Length); return signer.VerifySignature(expectedSig); } }
這樣,我們 通過 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 可以在線驗證。
希望能夠幫到大家!
