.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

众所周知在.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分别对应类:RsaXmlUtilRsaPkcs1UtilRsaPkcs8Util。它们继承自抽象类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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

IDEA快捷键拆解系列(十二):VCS篇

  以下是关于VCS导航项及其每一子项的拆解介绍,其中,加粗部分的选项是博主认为比较重要的。

622
来自专栏乐沙弥的世界

Percona XtraDB Cluster添加仲裁节点

Galera Arbitrator是Percona XtraDB集群的成员,用于投票,以防您拥有少量服务器(通常为两个)并且不希望添加更多资源。Galera仲裁...

1092
来自专栏Play & Scala 技术分享

解析Java为什么不接受合法的HTTPS证书

2835
来自专栏数据库新发现

使用Oracle Wrap工具加密你的代码

Last Updated: Monday, 2004-11-15 22:31 Eygle

672
来自专栏我爱编程

PyCharm

1454
来自专栏游戏杂谈

EditPlus中有用的快捷键

点击到该标记(全选或光标落在里面即可)按下ctrl+[就可以找到匹配的标签了。权支持HTML标签的匹配。

612
来自专栏一“技”之长

iOS中ImageIO框架详解与应用分析 原

    ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到图片文件的内容数据,ImageIO框架中包含6个头文件,其中完成主要功能的是前...

1522
来自专栏学海无涯

一篇文章搞定密码学基础

密码技术是网络安全的基础,也是核心。现在对隐私保护、敏感信息尤其重视,所以不论是系统开发还是App开发,只要有网络通信,很多信息都需要进行加密,以防止被截取篡改...

3569
来自专栏杨建荣的学习笔记

10g,11g数据泵的导入问题及解决(19天)

今天在环境上测试expdp/impdp,环境有10.2.0.5.0,11.2.0.2.0的,11g的环境是从10g升级到11gde .是在impdp的时候都报了...

2944
来自专栏杨建荣的学习笔记

外部表的导入导出问题 (41天)

今天尝试了一下用exp导出外部表,碰到了一些问题。 ----导出 今天导出的时候发现一个严重的问题,导出一个很小的外部表花了很长时间,最后还是报错,而且生成的d...

3465

扫码关注云+社区