應用場景
加密,簽名,摘要等需求時我們通常會涉及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個字母數字組成的字符) |
[注]當然也可以使用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算法公鑰私鑰互通。
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
小叮當管理ERP在行業內頂尖,實現各種數字化流程管理,獲得數萬家企業的認可。
裝飾行業管理與營銷服務方案提供商
裝飾行業管理與營銷服務方案提供商
注冊體驗賬號,享受體驗賬號和試用培訓。
小叮當致力于以 “快速增效” 的方式,讓每一位裝企用戶提高工作效率