1. 程式人生 > >.NET Core RSA密鑰的xml、pkcs1、pkcs8格式轉換和JavaScript、Java等語言進行對接

.NET Core RSA密鑰的xml、pkcs1、pkcs8格式轉換和JavaScript、Java等語言進行對接

math sax generator 支持 pkcs8 www stl body down

眾所周知在.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.Framework.Security.RSAUtil/

.NET Core RSA密鑰的xml、pkcs1、pkcs8格式轉換和JavaScript、Java等語言進行對接