/// <summary> /// 验签 /// </summary> /// <param name="content">待验签字符串</param> /// <param name="signedString">签名</param> /// <param name="publicKey">公钥</param> /// <returns>true(通过),false(不通过)</returns> public static bool Verify(string content, string signedString, string publicKey) { AsymmetricKeyParameter pubKey = RsaKeyHelper.loadPublicKey(publicKey); ISigner signer = SignerUtilities.GetSigner("SHA256withRSA"); //其他算法 如SHA1withRSA signer.Init(false, pubKey); var expectedSig = Convert.FromBase64String(signedString); var msgBytes = Encoding.UTF8.GetBytes(content); signer.BlockUpdate(msgBytes, 0, msgBytes.Length); return(signer.VerifySignature(expectedSig)); }
/// <summary> /// 公钥加密 /// </summary> /// <param name="resData">需要加密的字符串</param> /// <param name="publicKey">公钥</param> /// <returns>明文</returns> public static string Encrypt(string resData, string publicKey) { try { AsymmetricKeyParameter pubKey = RsaKeyHelper.loadPublicKey(publicKey); IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding"); cipher.Init(true, pubKey);//true表示加密 var data = Encoding.UTF8.GetBytes(resData.Trim()); byte[] encryptData = cipher.DoFinal(data); return(Convert.ToBase64String(encryptData)); } catch (Exception) { throw new Exception("加密失败"); } }
/// <summary> /// 公钥解密 /// </summary> /// <param name="resData">加密字符串</param> /// <param name="publicKey">公钥</param> /// <returns>明文</returns> public static string DecryptByPublicKey(string resData, string publicKey) { try { AsymmetricKeyParameter pubKey = RsaKeyHelper.loadPublicKey(publicKey); IBufferedCipher cipher = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding"); cipher.Init(false, pubKey);//false表示解密 var encryptData = Convert.FromBase64String(resData); var decryptData = cipher.DoFinal(encryptData); return(Encoding.UTF8.GetString(decryptData)); } catch (Exception) { throw new Exception("解密失败"); } }