/// <summary> /// RSA Verify /// </summary> /// <param name="content">raw content</param> /// <param name="signStr">sign str</param> /// <param name="publickKey">public key</param> /// <param name="hashAlgorithmName">hashAlgorithm name</param> /// <param name="rSASignaturePadding">ras siginature padding</param> /// <param name="encoding">text encoding</param> /// <returns></returns> public static bool RSAVerify(string content, string signStr, string publickKey, HashAlgorithmName hashAlgorithmName, RSASignaturePadding rSASignaturePadding, Encoding encoding) { Check.Argument.IsNotEmpty(content, nameof(content)); Check.Argument.IsNotEmpty(signStr, nameof(signStr)); byte[] dataBytes = encoding.GetBytes(content); byte[] signBytes = Convert.FromBase64String(signStr); using (System.Security.Cryptography.RSA rsa = System.Security.Cryptography.RSA.Create()) { rsa.FromJsonString(publickKey); return(rsa.VerifyData(dataBytes, signBytes, hashAlgorithmName, rSASignaturePadding)); } }
/// <summary> /// RSA Sign /// </summary> /// <param name="content">raw content </param> /// <param name="privateKey">private key</param> /// <param name="hashAlgorithmName">hashAlgorithm name</param> /// <param name="rSASignaturePadding">ras siginature padding</param> /// <param name="encoding">text encoding</param> /// <returns></returns> public static string RSASign(string content, string privateKey, HashAlgorithmName hashAlgorithmName, RSASignaturePadding rSASignaturePadding, Encoding encoding) { Check.Argument.IsNotEmpty(content, nameof(content)); Check.Argument.IsNotEmpty(privateKey, nameof(privateKey)); Check.Argument.IsNotNull(rSASignaturePadding, nameof(rSASignaturePadding)); byte[] dataBytes = encoding.GetBytes(content); using (System.Security.Cryptography.RSA rsa = System.Security.Cryptography.RSA.Create()) { rsa.FromJsonString(privateKey); var signBytes = rsa.SignData(dataBytes, hashAlgorithmName, rSASignaturePadding); return(Convert.ToBase64String(signBytes)); } }
public static string RSAEncrypt(string publicKey, string srcString, RSAEncryptionPadding padding) { Check.Argument.IsNotEmpty(publicKey, nameof(publicKey)); Check.Argument.IsNotEmpty(srcString, nameof(srcString)); Check.Argument.IsNotNull(padding, nameof(padding)); using (System.Security.Cryptography.RSA rsa = System.Security.Cryptography.RSA.Create()) { rsa.FromJsonString(publicKey); var maxLength = GetMaxRsaEncryptLengthClass.GetMaxRsaEncryptLength(rsa, padding); var rawBytes = Encoding.UTF8.GetBytes(srcString); if (rawBytes.Length > maxLength) { throw new OutofMaxlengthException($"'{srcString}' is out of max encrypt length {maxLength}", maxLength, rsa.KeySize, padding); } byte[] encryptBytes = rsa.Encrypt(rawBytes, padding); return(encryptBytes.ToHexString()); } }