-- 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等加密解密过程以及相应的数字签名(无证明过程)