RSA密鑰--JAVA和C#的區(qū)別及聯(lián)系
首先感謝:http://www.codeproject.com/Articles/25487/Cryptographic-Interoperability-Keys的文章。
由于公司同時(shí)使用.NET和JAVA,而且各個(gè)服務(wù)集使用接口來(lái)進(jìn)行通信,因此某些例如清算系統(tǒng)、收銀臺(tái)之類的安全性比較高的系統(tǒng)會(huì)使用RSA進(jìn)行加密。因此會(huì)涉及到密鑰的轉(zhuǎn)換。所以大概看了下C#的秘鑰跟JAVA的密鑰區(qū)別。
RSA對(duì)于程序本身是沒(méi)有區(qū)別的,其格式都是相同的。對(duì)于不同的程序來(lái)說(shuō),存儲(chǔ)使用的語(yǔ)法(包裝的類)會(huì)有所不同。
RSA語(yǔ)法和語(yǔ)法標(biāo)準(zhǔn)有很多,大的類型大概分為ASN.1、PKCS、X.509。
1、RSA語(yǔ)法介紹
ASN.1、PKCS是最初的,也是最主要的RSA公鑰和私鑰的語(yǔ)法標(biāo)準(zhǔn),被RSA Lab所維護(hù)。
ASN.1、PKCS#1都定義了公鑰和私鑰的類型——序列化的數(shù)字。
為了下一個(gè)層次的抽象(適當(dāng)?shù)陌b),現(xiàn)在一般使用的組合是:PKCS#8的私鑰,X.509的公鑰 。
PKCS語(yǔ)法主要用于私鑰,其內(nèi)部標(biāo)準(zhǔn)目前有10種。目前JAVA普遍使用的是PKCS#8,用作私鑰格式。
X.509語(yǔ)法主要用于公鑰,廣泛使用于web瀏覽器和SLL。
3種語(yǔ)法標(biāo)準(zhǔn)的公私鑰可以實(shí)現(xiàn)相互轉(zhuǎn)化,其核心為ASN1語(yǔ)法中的整數(shù)值(modulus,PublicExponent,privateExponent ),其余的數(shù)值都可以經(jīng)過(guò)計(jì)算后得出。
.NET使用的是標(biāo)準(zhǔn)的RSA格式,然后將其中的數(shù)字base64編碼后,生成XML進(jìn)行存儲(chǔ)。
java中使用的是PKCS#8,、X.509的公私鑰語(yǔ)法,存儲(chǔ)的都是相應(yīng)的JAVA類自動(dòng)生成的base64字符串。
由于存儲(chǔ)格式的區(qū)別,在相互轉(zhuǎn)換、讀取的時(shí)候,需要理解RSA相關(guān)的知識(shí),才能正確使用類來(lái)轉(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語(yǔ)法中包含了標(biāo)準(zhǔn)RSA格式私鑰中的所有整數(shù)值。配置對(duì)象需要生成PKCS#1語(yǔ)法的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)Winform小數(shù)字鍵盤(pán)模擬器
本文主要介紹了C#實(shí)現(xiàn)Winform小數(shù)字鍵盤(pán)模擬器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C#實(shí)現(xiàn)將RTF轉(zhuǎn)為HTML的示例代碼
RTF文檔即富文本格式(Rich?Text?Format)的文檔。我們?cè)谔幚砦募r(shí),遇到需要對(duì)文檔格式進(jìn)行轉(zhuǎn)換時(shí),可以將RTF轉(zhuǎn)為其他格式,如轉(zhuǎn)為DOCX/DOC、PDF或者HTML。本文將利用C#實(shí)現(xiàn)RTF轉(zhuǎn)HTML,需要的可以參考一下2022-04-04
C#實(shí)現(xiàn)多線程編程的簡(jiǎn)單案例
這篇文章介紹了C#實(shí)現(xiàn)多線程編程的簡(jiǎn)單案例,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C#使用晚綁定來(lái)實(shí)現(xiàn)壓縮Access數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了C#使用晚綁定來(lái)實(shí)現(xiàn)壓縮Access數(shù)據(jù)庫(kù)的方法,項(xiàng)目開(kāi)發(fā)中有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08

