加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.Net 操作证书文件

发布时间:2020-12-16 23:38:14 所属栏目:百科 来源:网络整理
导读:一、.Net加签与验签。经过测试,发现使用同一套私钥和公钥,JAVA和.Net可以实现互通 ?1.1 私钥加签 公钥验签 public void Encode() { try { var path = AppDomain.CurrentDomain.BaseDirectory + " ../../ADFS/donghuangtaiyi.pfx " ; X509Certificate2 cert

一、.Net加签与验签。经过测试,发现使用同一套私钥和公钥,JAVA和.Net可以实现互通

?1.1 私钥加签 公钥验签

        public void Encode()
        {
            try
            {
var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/donghuangtaiyi.pfx"; X509Certificate2 cert = new X509Certificate2(path,"xxxxx",X509KeyStorageFlags.Exportable); var privateKey = cert.PrivateKey.ToXmlString(true); var bt = Encoding.UTF8.GetBytes(data); var rsaProvider = new RSACryptoServiceProvider(); rsaProvider.FromXmlString(privateKey); byte[] inArray = rsaProvider.SignData(bt,CryptoConfig.MapNameToOID("SHA384")); var result = Convert.ToBase64String(inArray); } catch (Exception) { throw; } }

1.2验签

public void Decode()
        {
            try
            {


                var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/dongsheng.crt";
                var publicCert = new X509Certificate2(path);
                var publicKey = publicCert.PublicKey.Key.ToXmlString(false);

                var rsaProvider = new RSACryptoServiceProvider();
                rsaProvider.FromXmlString(publicKey);
                var signatureData = Encoding.UTF8.GetBytes(data);
                var result = rsaProvider.VerifyData(signatureData,CryptoConfig.MapNameToOID("SHA256"),Convert.FromBase64String(SignatureData));



            }
            catch (Exception ex)
            {

                throw;
            }
        }

?

二、实现私钥和公钥,.Net与Java转换。java和.Net秘钥格式不一样,.Net是xml格式,Java是字符串格式。

引用?BouncyCastle.dll类库

2.1 加签,这个加签结果和1.1的加签结果是一样的

public string EncodeJava()
        {
            try
            {
                var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/donghuangtaiyi.pfx";

                X509Certificate2 cert = new X509Certificate2(path,"7391428",X509KeyStorageFlags.Exportable);
                var privateKey = cert.PrivateKey.ToXmlString(true);
                var javaPrivateKey = DoNet2JavaForKey.RSAPrivateKeyDotNet2Java(privateKey);

                RsaKeyParameters privateKeyParam = (RsaKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(javaPrivateKey));
                ISigner signer = SignerUtilities.GetSigner("SHA384WithRSA");
                signer.Init(true,privateKeyParam); 
                var dataByte = Encoding.UTF8.GetBytes(data);
                signer.BlockUpdate(dataByte,0,dataByte.Length);
                var result = Convert.ToBase64String(signer.GenerateSignature());
                return result;
            }
            catch (Exception ex)
            {

                return "";
            }
        }

?

2.1解签

    

public void DecodeJava() { try { var data="12312ewrwe你好"; var path = AppDomain.CurrentDomain.BaseDirectory + "../../ADFS/dongsheng.crt"; var publicCert = new X509Certificate2(path); var publicKey = publicCert.PublicKey.Key.ToXmlString(false); var publicKeyJava = DoNet2JavaForKey.RSAPublicKeyDotNet2Java(publicKey); string hashAlgorithm = "SHA256WithRSA"; RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyJava)); ISigner signer = SignerUtilities.GetSigner(hashAlgorithm); //参数为false验签,参数为true加签 signer.Init(false,publicKeyParam); byte[] dataByte = Encoding.UTF8.GetBytes(data); signer.BlockUpdate(dataByte,dataByte.Length); byte[] signatureByte = Convert.FromBase64String(SignatureData); var result = signer.VerifySignature(signatureByte); } catch (Exception ex) { throw; } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读