.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接
2018-01-10 21:28
671 查看
众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式。我们在开发过程中很可能遇到需要与其他语言开发的api进行对接,如果遇到RSA加密解密,我们肯定需要保证key是相同的,才能保证数据的正确处理,我们肯定需要对密钥进行转换,下面我将我自己的使用经验分享给大家。
pkcs1和pkcs8的操作借助了开源项目bouncycastle
使用“RsaKeyGenerator”类。返回的结果是一个有两个元素的字符串的列表,元素1是私钥,元素2是公钥。
格式:XML
格式:Pkcs1
格式:Pkcs8
![](https://images2017.cnblogs.com/blog/668104/201801/668104-20180110212706707-1102115584.png)
使用“RsaKeyConvert”类。它支持这三种格式的密钥转换,即:xml,pkcs1,pkcs8。
XML-> Pkcs1:
私钥:
公钥:
XML-> Pkcs8:
私钥:
公钥:
Pkcs1-> XML:
私钥:
公钥:
Pkcs1-> Pkcs8:
私钥:
公钥:不需要转换
Pkcs8-> XML:
私钥:
公钥:
Pkcs8-> Pkcs1:
私钥:
公钥:不需要转换
XML,Pkcs1,Pkcs8分别对应类:
加密:
解密:
Sign:
验证:
使用类“RsaPemFormatHelper”。
格式化Pkcs1格式私钥:
删除Pkcs1格式私钥格式:
格式化Pkcs8格式私钥:
删除Pkcs8格式的私钥格式:
为了方便使用已经上传Nuget:https://www.nuget.org/packages/XC.Framework.Security.RSAUtil/
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];
![](https://images2017.cnblogs.com/blog/668104/201801/668104-20180110212706707-1102115584.png)
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.Framework.Security.RSAUtil/
相关文章推荐
- .NET Core RSA 签名和验签(密钥为 16 进制编码)
- java 使用pem密钥进行RSA加解密
- Porting .Net RSA xml keys to Java
- ASP.NET(C#)-JAVA对接RSA加密签名-第三章
- Java代码调用Net接口进行Webservices对接
- ASP.NET(C#)-JAVA对接RSA加密签名-第二章
- javascript语言中的闭包http://www.blogjava.net/zkjbeyond/archive/2006/05/19/47025.html
- ASP.NET(C#)-JAVA对接RSA加密签名-序言
- 用javascript与java进行RSA加密与解密
- 用javascript与java进行RSA加密与解密
- 用javascript与java进行RSA加密与解密
- C#利用Java的RSA密钥对,与Java进行通通讯
- 用javascript与java进行RSA加密与解密
- ASP.NET(C#)-JAVA对接RSA加密签名-第四章
- ASP.NET(C#)-JAVA对接RSA加密签名-第一章
- JSP中JAVA ,html/Javascript 交互-[http://blog.csdn.net/gm_jing]
- 【读网】最火网站背后的脚本语言,2007年XML十大预测,Java in 2007,Windows Vista内核揭密……
- 用Castor进行java到xml的绑定
- 用.NET&Java的眼光看汇编语言
- 结合JavaScript与ASP.NET Web窗体进行程序开发