衆所周知在.NET下的RSA類所生成的密鑰爲Xml格式,而其餘語言好比java通常使用pkcs8格式的密鑰,JavaScript通常使用pkcs1格式。咱們在開發過程當中極可能遇到須要與其餘語言開發的api進行對接,若是遇到RSA加密解密,咱們確定須要保證key是相同的,才能保證數據的正確處理,咱們確定須要對密鑰進行轉換,下面我將我本身的使用經驗分享給你們。java
pkcs1和pkcs8的操做藉助了開源項目bouncycastlegit
RSAUtil 項目是.NET Core下RSA算法使用幫助工具,支持使用RSA算法對數據進行加密,解密,簽名和驗證簽名,支持xml,pkcs1,pkcs8三種密鑰格式,支持這三種格式的密鑰相互轉換。最後還支持pem格式化。github
使用「RsaKeyGenerator」類。返回的結果是一個有兩個元素的字符串的列表,元素1是私鑰,元素2是公鑰。算法
格式:XMLshell
var keyList = RsaKeyGenerator.XmlKey(2048); var privateKey = keyList [0]; var publicKey = keyList [1];
格式:Pkcs1api
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];
使用「RsaKeyConvert」類。它支持這三種格式的密鑰轉換,即:xml,pkcs1,pkcs8。加密
RsaKeyConvert.PrivateKeyXmlToPkcs1()
RsaKeyConvert.PublicKeyXmlToPem()
RsaKeyConvert.PrivateKeyXmlToPkcs8()
RsaKeyConvert.PublicKeyXmlToPem()
RsaKeyConvert.PrivateKeyPkcs1ToXml()
RsaKeyConvert.PublicKeyPemToXml()
RsaKeyConvert.PrivateKeyPkcs1ToPkcs8()
RsaKeyConvert.PrivateKeyPkcs8ToXml()
RsaKeyConvert.PublicKeyPemToXml()
RsaKeyConvert.PrivateKeyPkcs8ToPkcs1()
XML,Pkcs1,Pkcs8分別對應類:
RsaXmlUtil
,RsaPkcs1Util
,RsaPkcs8Util
。它們繼承自抽象類RSAUtilBase
code
RSAUtilBase.Encrypt()
RSAUtilBase.Decrypt()
RSAUtilBase.SignData()
RSAUtilBase.VerifyData()
使用類「RsaPemFormatHelper」。orm
RsaPemFormatHelper.Pkcs1PrivateKeyFormat()
RsaPemFormatHelper.Pkcs1PrivateKeyFormatRemove()
RsaPemFormatHelper.Pkcs8PrivateKeyFormat()
RsaPemFormatHelper.Pkcs8PrivateKeyFormatRemove()
本項目已開源,若是對您有幫助,歡迎來個star:https://github.com/stulzq/RSAUtil
爲了方便使用已經上傳Nuget:https://www.nuget.org/packages/XC.RSAUtil/
直接使用命令安裝:
Install-Package XC.RSAUtil