栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# SHA256WithRSA签名、验签 .net4.0

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#  SHA256WithRSA签名、验签 .net4.0

public static string Sign(string contentForSign, string privateKey)
        {
            //转换成适用于.Net的秘钥
            var netKey = RSAPrivateKeyJava2DotNet(privateKey);
            var rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(netKey);
            //创建一个空对象
            var rsaClear = new RSACryptoServiceProvider();
            var paras = rsa.ExportParameters(true);
            rsaClear.ImportParameters(paras);
            //签名返回
            using (var sha256 = new SHA256CryptoServiceProvider())
            {
                var signData = rsa.SignData(Encoding.UTF8.GetBytes(contentForSign), sha256);
                //return BytesToHex(signData);
                return Convert.ToBase64String(signData);
            }
        }
        public static string RSAPrivateKeyJava2DotNet(string privateKey)
        {
            RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));

            return string.Format("{0}{1}

{2}

{3}{4}{5}{6}{7}",
                Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
        }

 public static string RSAPublicKeyJava2DotNet(string publikKey)
        {     
            RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publikKey));
            return string.Format("{0}{1}",
                Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
                Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
        }

///

       /// RSA签名验证
        /// 密文
        /// 需要比较的明文字符串
        /// 公匙
        /// 是否相同
        public static bool VerifySignature(string sEncryptSource, string sCompareString, string sPublicKey)
        {
            try
            {
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    rsa.FromXmlString(RSAPublicKeyJava2DotNet(sPublicKey));
                    RSAPKCS1SignatureDeformatter df = new RSAPKCS1SignatureDeformatter(rsa);
                    df.SetHashAlgorithm("SHA256");
                    byte[] signature = Convert.FromBase64String(sEncryptSource);
                    SHA256Managed sha2 = new SHA256Managed();
                    // byte[] compareByte = sha2.ComputeHash(System.Text.Encoding.Default.GetBytes(sCompareString));
                    string strBase64 = "";
                    byte[] b = System.Text.Encoding.Default.GetBytes(sCompareString);
                    //转成 Base64 形式的 System.String  
                    strBase64 = Convert.ToBase64String(b);
                    byte[] compareByte = sha2.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strBase64));
                    return df.VerifySignature(compareByte, signature);
                }
            }
            catch (Exception)
            {
                return false;
            }
        }
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号