RSA,ECC,Ecdsa,国密SM2的签名,验签,加密,解密,cer,.pfx制作介绍和使用

-- RSA,ECC,Ecdsa,国密SM2的签名,验签,公钥/私钥加密,公钥/私钥解密,.cer,.pfx制作的介绍和使用
【官网】:https://github.com/configlab/configlab

应用场景

加密,签名,摘要等需求时我们通常会涉及RSA,Md5,AES,DES,HAS-256,SM2,SM3,SM4等算法.

基础资源

根据需求而定

使用须知

RSA,SM2等摘要算法是广泛应用于简短信息加密和数字签名等领域。 长文信息建议用对称加密算法,但密钥用RSA,m2这种非对称加密算法处理。

配置步骤

【主流算法分类】

是否可逆 算法类型 算法 备注
可逆 对称加密 DES  密钥长度64,分组长度64
AES  密钥长度:128,192,256,分组长度128
SM4  密钥长度:128,分组长度128
非对称加密 RSA  基于特殊的可逆模幂运算
ECC  相比RSA:基于椭圆曲线,速度快,安全性高,发布时间较晚
SM2  基于ECC,国产
不可逆 摘要 HAS-256
Md5 摘要长度32
SM3  
SM3算法采用Merkle-Damgard结构,消息分组长度为512位
,摘要值长度为256位(62个字母数字组成的字符)

A)非对称加密-RSA系列场景的调试验证.

A1)RSA的公钥加密/私钥解密  与  私钥加密/公钥解密(一般用于RSA签名验签)

[注]当然也可以使用openssl(下载地址:http://slproweb.com/products/Win32OpenSSL.html   )

1、生成key
输入genrsa -out openssl.key 1024生成openssl.key文件。
openssl.key为key的名字随意起,1024为密钥长度
2、生成cer证书
接着输入req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=***.website
openssl.key为之前生成的key的名字,openssl.cer为生成的证书名字,3650为证书过期天数,CN的参数***.website是的你主机名或者IP地址(这里一定要写对,不然以后访问的话,浏览器会提示有风险)。
这样就生成了证书文件openssl.cer
3、生成需要的PFX私钥文件
输入pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer
会让你输入密码,使用私钥时候使用的(千万不能忘记)。
这样就生成了私钥文件openssl.pfx。

 A1.2)非对称加密-RSA的公钥/私钥对格式的转换(pkcs8,pkcs1,xml格式 等).

   [注]这样不但可以支持c#自带的rsa生成xml格式的公钥私钥转为openssl那种格式,也能和java,php等语言的rsa算法公钥私钥互通。

 A1.3)生成.cer, .pfx格式的证书,支持密码保护,  对SAML2.0,Auth协议,http安全请求等场景下证书生成都适用.

B)非对称散列算法-ECC/Ecdsa系列的调试验证(注:ECC类的算法从安全性,性能都全面超越RSA, 包括国产SM2也是基于ECC).

  B.1)基于ECC非对称(椭圆曲线类)的JwtToken生成与校验,Ecdsa签名与验签应用.

 [注]生成token的.net代码实现:


        public static KeyValuePair<string,string> CreateKeyPair(string keyName)
        {
            // 公钥,私钥
            byte[] publicKeyBytes, privateKeyBytes;
            CngKey cngKey;
            // 打开密钥
            if (CngKey.Exists(keyName))
            {
                cngKey = CngKey.Open(keyName);
                cngKey.Delete();
            }
            // 生成密钥
            CngKeyCreationParameters creationParameters = new CngKeyCreationParameters();
            // 允许以明文的形式导出私钥
            creationParameters.ExportPolicy = CngExportPolicies.AllowPlaintextExport;
             // 使用 ECDsaP256,ECDsaP384,ECDsaP521 证书长度分别是 64 Bytes, 96 Bytes, 132 Bytes。
             cngKey = CngKey.Create(CngAlgorithm.ECDsaP256, keyName, creationParameters);
            // 导出公钥
            publicKeyBytes = cngKey.Export(CngKeyBlobFormat.EccPublicBlob);
            string EccPublicKey = Convert.ToBase64String(publicKeyBytes);
            // 导出私钥
            privateKeyBytes = cngKey.Export(CngKeyBlobFormat.EccPrivateBlob);
            string EccPrivateKey = Convert.ToBase64String(privateKeyBytes);
            return new KeyValuePair<string, string>(EccPrivateKey,EccPublicKey);
        }



C)非对称加密-国密SM2的加密解密校验的调试验证.

 C1)国密SM2的公钥/私钥加解密.


C2)国密SM2的签名,验签,密钥交换(假定一个非安全环境下的安全交换密钥的机制)..

   [注]该工具集成了csdn大牛 jhqin的工具,在此进行致谢,博客地址: https://blog.csdn.net/jhqin/article/details/47005047



  

常见问题

快速入门

参考资料