示例#1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <param name="privateKey"></param>
        /// <param name="type"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static string Sign(string data, string privateKey, RsaType type = RsaType.RSA, Encoding encoding = null)
        {
            if (string.IsNullOrEmpty(data)) throw new ArgumentNullException(nameof(data));
            if (string.IsNullOrEmpty(privateKey)) throw new ArgumentNullException(nameof(privateKey));
            if (encoding == null) encoding = Encoding.UTF8;
#if netstandard
            using (var rsa = RSA.Create())
#else
            using (var rsa = new RSACryptoServiceProvider())
#endif
            {
                var rsaParameters = GetRsaParameterByPrivateKey(privateKey);
                rsa.ImportParameters(rsaParameters);
                var dataBytes = encoding.GetBytes(data);
#if netstandard
                var hashAlgorithmName = type == RsaType.RSA ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
                var signatureBytes = rsa.SignData(dataBytes, hashAlgorithmName, RSASignaturePadding.Pkcs1);
#else
                var hashAlgorithmName = type == RsaType.RSA ? "SHA1" : "SHA256";
                var signatureBytes = rsa.SignData(dataBytes, hashAlgorithmName);
#endif
                var result = Convert.ToBase64String(signatureBytes);

                return result;
            }
        }
示例#2
0
        /// <summary>
        /// 签名,使用私钥签名
        /// </summary>
        /// <param name="value">待签名的值</param>
        /// <param name="key">密钥</param>
        /// <param name="encoding">编码</param>
        /// <param name="type">算法类型</param>
        /// <param name="padding">填充方式</param>
        /// <returns></returns>
        public static string Sign(string value, string key, Encoding encoding, RsaType type,
                                  RSASignaturePadding padding)
        {
            byte[] data           = encoding.GetBytes(value);
            var    provider       = CreateRsaProviderFromPrivateKey(key);
            var    signatureBytes = provider.SignData(data, GetHashAlgorithmName(type), padding);

            return(Convert.ToBase64String(signatureBytes));
        }
示例#3
0
        /// <summary>
        ///     Rsa加密
        /// </summary>
        private static string RsaSign(string value, string key, Encoding encoding, RsaType type)
        {
            if (string.IsNullOrWhiteSpace(value) || string.IsNullOrWhiteSpace(key))
            {
                return(string.Empty);
            }

            var rsa = new RsaHelper(type, encoding, key);

            return(rsa.Sign(value));
        }
示例#4
0
        /// <summary>
        /// 获取哈希算法名
        /// </summary>
        /// <param name="type">Rsa 算法类型</param>
        /// <returns></returns>
        private static HashAlgorithmName GetHashAlgorithmName(RsaType type)
        {
            switch (type)
            {
            case RsaType.Rsa:
                return(HashAlgorithmName.SHA1);

            case RsaType.Rsa2:
                return(HashAlgorithmName.SHA256);

            default:
                return(HashAlgorithmName.SHA1);
            }
        }
示例#5
0
        /// <summary>
        ///     实例化RSAHelper
        /// </summary>
        /// <param name="rsaType">加密算法类型 RSA SHA1;RSA2 SHA256 密钥长度至少为2048</param>
        /// <param name="encoding">编码类型</param>
        /// <param name="privateKey">私钥</param>
        /// <param name="publicKey">公钥</param>
        public RsaHelper(RsaType rsaType, Encoding encoding, string privateKey, string publicKey = null)
        {
            _encoding = encoding;
            if (!string.IsNullOrEmpty(privateKey))
            {
                _privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey);
            }

            if (!string.IsNullOrEmpty(publicKey))
            {
                _publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey);
            }

            _hashAlgorithmName = rsaType == RsaType.Rsa ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
        }
示例#6
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <param name="sign"></param>
        /// <param name="publicKey"></param>
        /// <param name="type"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        public static bool VerifyData(string data, string sign, string publicKey, RsaType type = RsaType.RSA, Encoding encoding = null)
        {
            if (string.IsNullOrEmpty(data)) throw new ArgumentNullException(nameof(data));
            if (string.IsNullOrEmpty(sign)) throw new ArgumentNullException(nameof(sign));
            if (string.IsNullOrEmpty(publicKey)) throw new ArgumentNullException(nameof(publicKey));
            if (encoding == null) encoding = Encoding.UTF8;
            byte[] dataBytes = encoding.GetBytes(data);
            byte[] signBytes = Convert.FromBase64String(sign);
#if netstandard
            using (var rsa = RSA.Create())
#else
            using (var rsa = new RSACryptoServiceProvider() { PersistKeyInCsp = false })
#endif
            {
                RSAParameters rsaKeyInfo = GetRsaParameterByPublicKey(publicKey);
                rsa.ImportParameters(rsaKeyInfo);
#if netstandard
                var hashAlgorithmName = type == RsaType.RSA ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
                var result = rsa.VerifyData(dataBytes, signBytes, hashAlgorithmName, RSASignaturePadding.Pkcs1);
#else
                //bool result = false;
                //if (type == RsaType.RSA)
                //{
                //    using (var sha1 = new SHA1CryptoServiceProvider())
                //    {
                //        result = rsa.VerifyData(dataBytes, sha1, signBytes);
                //    }
                //}
                //else
                //{
                //    result = rsa.VerifyData(dataBytes, "SHA256", signBytes);
                //}
                var hashAlgorithmName = type == RsaType.RSA ? "SHA1" : "SHA256";
                var result = rsa.VerifyData(dataBytes, hashAlgorithmName, signBytes);
#endif
                return result;
            }
        }
        /// <summary>
        /// 实例化RSAHelper 调用方式 RSAHelper RSA = new RSAHelper(RSAType.RSA, Encoding.UTF8);
        /// </summary>
        /// <param name="rsaType">加密算法类型 RSA SHA1;RSA2 SHA256 密钥长度至少为2048</param>
        /// <param name="encoding">编码类型</param>
        /// <param name="privateKey">私钥</param>
        /// <param name="publicKey">公钥</param>
        public RsaProvider(RsaType rsaType, Encoding encoding, string privateKey = "", string publicKey = "")
        {
            if (string.IsNullOrEmpty(privateKey))
            {
                privateKey = defaultprivateKey;
            }
            if (string.IsNullOrEmpty(publicKey))
            {
                publicKey = defaultpublicKey;
            }

            _encoding = encoding;
            if (!string.IsNullOrEmpty(privateKey))
            {
                _privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey);
            }

            if (!string.IsNullOrEmpty(publicKey))
            {
                _publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey);
            }

            _hashAlgorithmName = rsaType == RsaType.RSA ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
        }
示例#8
0
        /// <summary>
        ///     Rsa验签
        /// </summary>
        private static bool RsaVerify(string value, string publicKey, string sign, Encoding encoding, RsaType type)
        {
            if (string.IsNullOrWhiteSpace(value) || string.IsNullOrWhiteSpace(publicKey) ||
                string.IsNullOrWhiteSpace(sign))
            {
                return(false);
            }

            var rsa = new RsaHelper(type, encoding, publicKey, publicKey);

            return(rsa.Verify(value, sign));
        }
示例#9
0
 /// <summary>
 /// 签名,使用私钥签名
 /// </summary>
 /// <param name="value">待签名的值</param>
 /// <param name="key">密钥</param>
 /// <param name="encoding">编码</param>
 /// <param name="type">算法类型</param>
 /// <returns></returns>
 public static string Sign(string value, string key, Encoding encoding, RsaType type)
 {
     return(Sign(value, key, encoding, type, RSASignaturePadding.Pkcs1));
 }
示例#10
0
 /// <summary>
 /// 签名,使用私钥签名
 /// </summary>
 /// <param name="value">待签名的值</param>
 /// <param name="key">密钥</param>
 /// <param name="type">算法类型,默认Rsa</param>
 /// <returns></returns>
 public static string Sign(string value, string key, RsaType type = RsaType.Rsa)
 {
     return(Sign(value, key, Encoding.UTF8, type));
 }
示例#11
0
        /// <summary>
        /// 验签,使用公钥验证签名
        /// </summary>
        /// <param name="value">原始数据</param>
        /// <param name="sign">签名</param>
        /// <param name="key">密钥</param>
        /// <param name="encoding">编码</param>
        /// <param name="type">算法类型</param>
        /// <param name="padding">填充方式</param>
        /// <returns></returns>
        public static bool Verify(string value, string sign, string key, Encoding encoding, RsaType type,
                                  RSASignaturePadding padding)
        {
            byte[] dataBytes = encoding.GetBytes(value);
            byte[] signBytes = Convert.FromBase64String(sign);
            var    provider  = CreateRsaProviderFromPublicKey(key);

            return(provider.VerifyData(dataBytes, signBytes, GetHashAlgorithmName(type), padding));
        }
示例#12
0
 /// <summary>
 /// 验签,使用公钥验证签名
 /// </summary>
 /// <param name="value">原始数据</param>
 /// <param name="sign">签名</param>
 /// <param name="key">密钥</param>
 /// <param name="encoding">编码</param>
 /// <param name="type">算法类型</param>
 /// <returns></returns>
 public static bool Verify(string value, string sign, string key, Encoding encoding, RsaType type)
 {
     return(Verify(value, sign, key, encoding, type, RSASignaturePadding.Pkcs1));
 }
示例#13
0
 /// <summary>
 /// 验签,使用公钥验证签名
 /// </summary>
 /// <param name="value">原始数据</param>
 /// <param name="sign">签名</param>
 /// <param name="key">密钥</param>
 /// <param name="type"></param>
 /// <returns></returns>
 public static bool Verify(string value, string sign, string key, RsaType type = RsaType.Rsa)
 {
     return(Verify(value, sign, key, Encoding.UTF8, RsaType.Rsa));
 }