眾所周知在.NET下的RSA類所生成的金鑰為Xml格式,而其他語言比如java一般使用pkcs8格式的金鑰,JavaScript一般使用pkcs1格式。我們在開發過程中很可能遇到需要與其他語言開發的api進行對接,如果遇到RSA加密解密,我們肯定需要保證key是相同的,才能保證資料的正確處理,我們肯定需要對金鑰進行轉換,下麵我將我自己的使用經驗分享給大家。
pkcs1和pkcs8的操作藉助了開源專案bouncycastle
RSAUtil 專案
RSAUtil 專案是.NET Core下RSA演演算法使用幫助工具,支援使用RSA演演算法對資料進行加密,解密,簽名和驗證簽名,支援xml,pkcs1,pkcs8三種金鑰格式,支援這三種格式的金鑰相互轉換。最後還支援pem格式化。
使用
生成金鑰
使用“RsaKeyGenerator”類。傳回的結果是一個有兩個元素的字串的串列,元素1是私鑰,元素2是公鑰。
格式:XML
var keyList = RsaKeyGenerator.XmlKey(2048);
var privateKey = keyList [0];
var publicKey = keyList [1];
格式:Pkcs1
var keyList = RsaKeyGenerator.Pkcs1Key(2048);
var privateKey = keyList [0];
var publicKey = keyList [1];
格式:Pkcs8
var keyList = RsaKeyGenerator.Pkcs8Key(2048);
var privateKey = keyList [0];
var publicKey = keyList [1];
RSA金鑰轉換
使用“RsaKeyConvert”類。它支援這三種格式的金鑰轉換,即:xml,pkcs1,pkcs8。
XML-> Pkcs1:
- 私鑰:
RsaKeyConvert.PrivateKeyXmlToPkcs1()
- 公鑰:
RsaKeyConvert.PublicKeyXmlToPem()
XML-> Pkcs8:
- 私鑰:
RsaKeyConvert.PrivateKeyXmlToPkcs8()
- 公鑰:
RsaKeyConvert.PublicKeyXmlToPem()
Pkcs1-> XML:
- 私鑰:
RsaKeyConvert.PrivateKeyPkcs1ToXml()
- 公鑰:
RsaKeyConvert.PublicKeyPemToXml()
Pkcs1-> Pkcs8:
- 私鑰:
RsaKeyConvert.PrivateKeyPkcs1ToPkcs8()
- 公鑰:不需要轉換
Pkcs8-> XML:
- 私鑰:
RsaKeyConvert.PrivateKeyPkcs8ToXml()
- 公鑰:
RsaKeyConvert.PublicKeyPemToXml()
Pkcs8-> Pkcs1:
- 私鑰:
RsaKeyConvert.PrivateKeyPkcs8ToPkcs1()
- 公鑰:不需要轉換
加密,解密,簽名和驗證簽名
XML,Pkcs1,Pkcs8分別對應類:
RsaXmlUtil
,RsaPkcs1Util
,RsaPkcs8Util
。它們繼承自抽象類RSAUtilBase
- 加密:
RSAUtilBase.Encrypt()
- 解密:
RSAUtilBase.Decrypt()
- Sign:
RSAUtilBase.SignData()
- 驗證:
RSAUtilBase.VerifyData()
PEM格式化
使用類“RsaPemFormatHelper”。
- 格式化Pkcs1格式私鑰:
RsaPemFormatHelper.Pkcs1PrivateKeyFormat()
- 刪除Pkcs1格式私鑰格式:
RsaPemFormatHelper.Pkcs1PrivateKeyFormatRemove()
- 格式化Pkcs8格式私鑰:
RsaPemFormatHelper.Pkcs8PrivateKeyFormat()
- 刪除Pkcs8格式的私鑰格式:
RsaPemFormatHelper.Pkcs8PrivateKeyFormatRemove()
其他說明
本專案已開源,如果對您有幫助,歡迎來個star:https://github.com/stulzq/RSAUtil
為了方便使用已經上傳Nuget:https://www.nuget.org/packages/XC.RSAUtil/
直接使用命令安裝:
Install-Package XC.RSAUtil
原文地址:https://www.cnblogs.com/kevin860/p/9557833.html