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

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

  1. Python中xml和dict格式转换

    在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决.最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,解决方式是:接口文档拿到的是XML,在线转化为js ...

  2. .NET Core RSA 指南与增强扩展 RSAExtensions

    一. 前言 RSA 作为最常用的非对称加密算法,在我们的实际使用中还是比较常见的,特别是对接支付十有八九都会遇到,或者是其他需要数据安全的业务场景.在 .NET Framework 以及 .NET C ...

  3. openssl RSA密钥格式PKCS1和PKCS8相互转换

    RSA私钥格式PKCS1和PKCS8相互转换 RSA公钥格式PKCS1和PKCS8相互转换 以下转换基于openssl命令的操作: 1. openssl 生成pkcs1格式的私钥,密钥长度1024位, ...

  4. RSA加密解密中pkcs1与pkcs8格式私钥互相转换

    net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...

  5. pkcs1与pkcs8格式RSA私钥互相转换

    转自:http://blog.csdn.net/duan19056/article/details/52104966 1.PKCS1私钥生成 openssl genrsa -out private.k ...

  6. .NET Core RSA 签名和验签(密钥为 16 进制编码)

    使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...

  7. .NET core RSA帮助类

    解决 Operation is not supported on this platform 异常 直接上代码: public class RSAHelper { /// <summary> ...

  8. windows上RSA密钥生成和使用

    一,下载安装windows平台openssl密钥生成工具,执行安装目录bin下的"openssl.exe",执行后弹出命令窗口如下 运行 二,生成私钥 输入"genrsa ...

  9. RSA密钥之C#格式与Java格式转换

    前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ...

随机推荐

  1. 》》初识移动端--rem

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta na ...

  2. SQL-Oracle游标

    游标提供了一种从集合性质的结果集中提供出单条记录的手段.初始时指向首记录. 游标的种类 静态游标.REF游标 静态游标:能够理解为一个数据快照,打开游标后的结果集是数据库表中数据的备份,数据不会对表的 ...

  3. java 可变參数

    我们在某些特定的需求环境下,可能要对某一个方法中的參数进行一些操作,并且这些方法中的參数是不规定的,那么问题来了,我们该怎么办呢? java事实上就为我们考虑了这样的情况,那就是使用可变參数 可变參数 ...

  4. iOS 力学动画生成器UIKit Dynamics 之碰撞效果解说

    UIKit Dynamic是iOS7 新增的一组类和方法.可赋予UIView逼真的行为和特征,不须要写动画效果那些繁琐的代码,让开发者可以轻松地改善应用的用户体验.一共同拥有6个可用于定制UIDyna ...

  5. iOS 多线程 之 GCD(大中枢派发)(一)

    导语: 本文个人原创,转载请注明出处(http://www.cnblogs.com/pretty-guy/p/8126981.html) 在iOS开发中多线程操作通常是一下3种,本文着重介绍Dispa ...

  6. Java SpringMVC 定时任务

    1.web.xml 2.spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <bean ...

  7. margin相关

    1.图片与文字对齐问题 如果图片和文字差不多大时,使用兼容性强的margin负值方法. 方法:img{margin:0 3px -3px 0;} 2.div嵌套后margin出现失效(转移)问题 原因 ...

  8. 文件系统常用命令df、du、fsck、dumpe2fs

    df 查看文件系统 [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda5 16558080 1337676 15220404 9% / de ...

  9. 添加组groupadd,修改组groupmod,删除组groupdel,将用户加入删除组gpasswd

    groupadd -g GID :指定组id groupmod -g GID :修改组id -n 新组名 :修改组名 groupmod -n newname oldname groupdel grou ...

  10. ASP.NET Core MVC请求超时设置解决方案

    设置请求超时解决方案 当进行数据导入时,若导入数据比较大时此时在ASP.NET Core MVC会出现502 bad gateway请求超时情况(目前对于版本1.1有效,2.0未知),此时我们需要在项 ...