众所周知在.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