配置啦 配置啦

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,ECC,ECDsa,SM2等)签名,验签,jwttoken,证书制作等
  • 通用调试工具(含RSA,ECC,ECDsa,SM2等)签名,验签,jwttoken,证书制作等(下载地址2)
  • 博客园下载地址

使用须知

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



  

常见问题

快速入门

参考资料

  • SM2国密算法证书解析
  • 国密SM2 / SM3 / SM4 / SM9 / ZUC算法的官方源代码
  • 浅谈DES、RAS、SHA-256与SM1、SM2、SM3、SM4区别
  • 国家商用密码(四)开放动态库及演示程序
  • 国家商用密码算法开放动态库及演示程序C#语言版本
  • OpenSSL命令—ecparam
  • OpenSSL命令—ec
  • SM3杂凑算法
  • 国密(国产密码)SM2、SM3、SM4 C#实现
  • SM2 国密前端加密js代码
  • SM2国密算法证书解析(jonllen)
  • JS版SM2国密算法的签名验证
  • 国密算法sm2、sm3和sm4的js版 及 IE兼容处理
  • SM2_SM3_SM4Encrypt
  • 【转】C#实现SM2国密加密
  • DotnetCore.RSA开源项目
  • RSA加密使用方式及签名验证
  • 程默的博客
  • 国密SM1、SM2、SM3、SM4算法资料大全
  • 国密SM2系列算法验证工具(含github地址)
  • 国密SM2加密示例(java)
  • 国密SM2加密解密Demo(内附C#与java源码)
  • 在线签发测试国密证书
  • 解读ECC加密算法
  • sm2在线验证
  • 国密算法工具-SmUtil
  • 支付宝开发助手
  • ECC和ECDSA
  • RSA、Elgamal、ECC等加密解密过程以及相应的数字签名(无证明过程)