RSA密鑰–JAVA和C#的區別及聯系
首先感謝:http://www.codeproject.com/Articles/25487/Cryptographic-Interoperability-Keys的文章。
由於公司同時使用.NET
和JAVA
,而且各個服務集使用接口來進行通信,因此某些例如清算系統、收銀臺之類的安全性比較高的系統會使用RSA進行加密。因此會涉及到密鑰的轉換。所以大概看瞭下C#的秘鑰跟JAVA的密鑰區別。
RSA
對於程序本身是沒有區別的,其格式都是相同的。對於不同的程序來說,存儲使用的語法(包裝的類)會有所不同。
RSA
語法和語法標準有很多,大的類型大概分為ASN.1
、PKCS
、X.509
。
1、RSA語法介紹
ASN.1、PKCS
是最初的,也是最主要的RSA公鑰和私鑰的語法標準,被RSA Lab
所維護。
ASN.1、PKCS#1
都定義瞭公鑰和私鑰的類型——序列化的數字。
為瞭下一個層次的抽象(適當的包裝),現在一般使用的組合是:PKCS#8
的私鑰,X.509
的公鑰 。
PKCS
語法主要用於私鑰,其內部標準目前有10種。目前JAVA
普遍使用的是PKCS#8
,用作私鑰格式。
X.509
語法主要用於公鑰,廣泛使用於web
瀏覽器和SLL
。
3種語法標準的公私鑰可以實現相互轉化,其核心為ASN1語法中的整數值(modulus
,PublicExponent
,privateExponent
),其餘的數值都可以經過計算後得出。
.NET
使用的是標準的RSA
格式,然後將其中的數字base64
編碼後,生成XML
進行存儲。
java中使用的是PKCS#8
,、X.509
的公私鑰語法,存儲的都是相應的JAVA類自動生成的base64
字符串。
由於存儲格式的區別,在相互轉換、讀取的時候,需要理解RSA
相關的知識,才能正確使用類來轉換。
1.1 C#轉JAVA
C#
中的公私鑰使用XML字符串進行存儲,讀取時直接讀入字符串即可。
由於C#使用的是標準的RSA格式,因此JAVA的RSAPublicKeySpec
、RSAPrivateKeySpec
配置類的核心參數(modulus
,PublicExponent
,privateExponent
)都可以從對應XML中的節點值(Modulus-modulus
、Exponent-PublicExponent
、D-privateExponent
)base64
解碼後獲取。然後將其傳入JAVA配置類中,然後根據配置類生成相應的RSA
公私鑰。
View Code
1.2 JAVA轉C#
JAVA
中的公私鑰使用base64
進行存儲,解碼成字節數組後,首先需要生成相應的配置對象(PKCS#8
,、X.509
),根據配置對象生成RSA
公私鑰。
私鑰:
C#
使用的是標準的RSA
格式,PKCS#1
語法中包含瞭標準RSA
格式私鑰中的所有整數值。配置對象需要生成PKCS#1
語法的RSA
對象(RSAPrivateCrtKey
),獲取對象屬性,自行構造私鑰XML
。
View Code
公鑰:
公鑰跟私鑰生成步驟相同,配置對象生成標準的RSA
對象(RSAPublicKey
)。
View Code
到此這篇關於RSA密鑰–JAVA和C#的區別及聯系的文章就介紹到這瞭,更多相關RSA密鑰 JAVA C#內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 簡單的Python解密rsa案例
- C#加密知識整合 (AES,MD5,RSA,SHA256)
- JAVA寶藏工具hutool的使用
- 教你用Java實現RSA非對稱加密算法
- Java基礎-Java的體系結構