RSA密鑰--JAVA和C#的區(qū)別及聯(lián)系
首先感謝:http://www.codeproject.com/Articles/25487/Cryptographic-Interoperability-Keys的文章。
由于公司同時(shí)使用.NET和JAVA,而且各個(gè)服務(wù)集使用接口來進(jìn)行通信,因此某些例如清算系統(tǒng)、收銀臺(tái)之類的安全性比較高的系統(tǒng)會(huì)使用RSA進(jìn)行加密。因此會(huì)涉及到密鑰的轉(zhuǎn)換。所以大概看了下C#的秘鑰跟JAVA的密鑰區(qū)別。
RSA對(duì)于程序本身是沒有區(qū)別的,其格式都是相同的。對(duì)于不同的程序來說,存儲(chǔ)使用的語法(包裝的類)會(huì)有所不同。
RSA語法和語法標(biāo)準(zhǔn)有很多,大的類型大概分為ASN.1、PKCS、X.509。
1、RSA語法介紹
ASN.1、PKCS是最初的,也是最主要的RSA公鑰和私鑰的語法標(biāo)準(zhǔn),被RSA Lab所維護(hù)。
ASN.1、PKCS#1都定義了公鑰和私鑰的類型——序列化的數(shù)字。
為了下一個(gè)層次的抽象(適當(dāng)?shù)陌b),現(xiàn)在一般使用的組合是:PKCS#8的私鑰,X.509的公鑰 。
PKCS語法主要用于私鑰,其內(nèi)部標(biāo)準(zhǔn)目前有10種。目前JAVA普遍使用的是PKCS#8,用作私鑰格式。
X.509語法主要用于公鑰,廣泛使用于web瀏覽器和SLL。
3種語法標(biāo)準(zhǔn)的公私鑰可以實(shí)現(xiàn)相互轉(zhuǎn)化,其核心為ASN1語法中的整數(shù)值(modulus,PublicExponent,privateExponent ),其余的數(shù)值都可以經(jīng)過計(jì)算后得出。
.NET使用的是標(biāo)準(zhǔn)的RSA格式,然后將其中的數(shù)字base64編碼后,生成XML進(jìn)行存儲(chǔ)。
java中使用的是PKCS#8,、X.509的公私鑰語法,存儲(chǔ)的都是相應(yīng)的JAVA類自動(dòng)生成的base64字符串。
由于存儲(chǔ)格式的區(qū)別,在相互轉(zhuǎn)換、讀取的時(shí)候,需要理解RSA相關(guān)的知識(shí),才能正確使用類來轉(zhuǎn)換。
1.1 C#轉(zhuǎn)JAVA
C#中的公私鑰使用XML字符串進(jìn)行存儲(chǔ),讀取時(shí)直接讀入字符串即可。
由于C#使用的是標(biāo)準(zhǔn)的RSA格式,因此JAVA的RSAPublicKeySpec、RSAPrivateKeySpec配置類的核心參數(shù)(modulus,PublicExponent,privateExponent )都可以從對(duì)應(yīng)XML中的節(jié)點(diǎn)值(Modulus-modulus 、Exponent-PublicExponent 、D-privateExponent )base64解碼后獲取。然后將其傳入JAVA配置類中,然后根據(jù)配置類生成相應(yīng)的RSA公私鑰。
View Code
1.2 JAVA轉(zhuǎn)C#
JAVA中的公私鑰使用base64進(jìn)行存儲(chǔ),解碼成字節(jié)數(shù)組后,首先需要生成相應(yīng)的配置對(duì)象(PKCS#8,、X.509 ),根據(jù)配置對(duì)象生成RSA公私鑰。
私鑰:
C#使用的是標(biāo)準(zhǔn)的RSA格式,PKCS#1語法中包含了標(biāo)準(zhǔn)RSA格式私鑰中的所有整數(shù)值。配置對(duì)象需要生成PKCS#1語法的RSA對(duì)象(RSAPrivateCrtKey),獲取對(duì)象屬性,自行構(gòu)造私鑰XML。
View Code
公鑰:
公鑰跟私鑰生成步驟相同,配置對(duì)象生成標(biāo)準(zhǔn)的RSA對(duì)象(RSAPublicKey)。
View Code
到此這篇關(guān)于RSA密鑰--JAVA和C#的區(qū)別及聯(lián)系的文章就介紹到這了,更多相關(guān)RSA密鑰 JAVA C#內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)JSON字符串序列化與反序列化的方法
在這篇文章中,我們將會(huì)學(xué)到如何使用C#,來序列化對(duì)象成為Json格式的數(shù)據(jù),以及如何反序列化Json數(shù)據(jù)到對(duì)象。2017-01-01
C/C++與Java各數(shù)據(jù)類型所占字節(jié)數(shù)的詳細(xì)比較
本篇文章主要是對(duì)C/C++與Java各數(shù)據(jù)類型所占字節(jié)數(shù)進(jìn)行了詳細(xì)的對(duì)比。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01
c# wpf使用GMap.NET類庫(kù),實(shí)現(xiàn)地圖軌跡回放
這篇文章主要介紹了c# wpf使用GMap.NET類庫(kù),實(shí)現(xiàn)地圖軌跡回放的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03
C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換
這篇文章介紹了C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#中幾個(gè)未知的Visual Studio編碼技巧分享
用了多年的Visual Studio,今天才發(fā)現(xiàn)這個(gè)編碼技巧,真是慚愧,分享出來,算是拋磚引玉吧,需要的朋友可以參考下2012-11-11
C#中Array與ArrayList用法及轉(zhuǎn)換的方法
C#中Array與ArrayList用法及轉(zhuǎn)換的方法,需要的朋友可以參考一下2013-03-03

