天天看點

C# Java間進行RSA加密解密互動

這裡,講一下RSA算法加解密在C#和Java之間互動的問題,這兩天糾結了很久,也看了很多其他人寫的文章,頗受裨益,但沒能解決我的實際問題,終于,還是被我搗鼓出來了。

首先,介紹一下寫這代碼的目的:完成webService驗證問題,伺服器端采用C#開發,用戶端采用Java開發。伺服器端給用戶端提供公鑰,已進行資料加密,用戶端加密後提資料送出給伺服器,伺服器用私鑰對資料解密,進行驗證。 

這裡遇到的主要問題是C# RSACryptoServiceProvider類産生的公鑰、私鑰都是xml字元串資料,而java RSA算法要求的 Modulus、Exponent都是BigInteger類型,兩者間的轉換才是問題所在。 

接下來講一下實作步驟:

首先由C# RSACryptoServiceProvider類生成公鑰、私鑰

如此處生成的公鑰為

在用戶端(Java)對C#提供的公鑰提取Modulus和Exponent

用Modulus和Exponent産生公鑰RSAPublicKey(java)

這裡有個關鍵步驟先對Mudolus和Exponent進行Base64解碼,這個是由于C#生成的密鑰對,其參數已經過Base64編碼成String類型,而java

RSA參數是未經base64編碼的byte[]類型。

獲得公鑰後就可以進行RSA加密處理了,這裡還有一點需要提的是,RSA加密解密都有最大長度限制,加密最大長度為117位元組,解密最大長度是128位元組,此外,此處加密得到的資料是經過Base64編碼處理的

加密後的資料送出給C#伺服器端進行解密,當然,這裡也要注意最大長度限制問題

這樣,就順利完成了。

經過測試,這樣做的确得到了正确的結果。

若是有什麼地方有問題,還望大家指正!

----------------------------------------------------------------------------------------

<a target="_blank" href="http://blog.csdn.net/dslinmy/article/details/37881067">C# Java間進行RSA加密解密互動(二)</a>

<a target="_blank" href="http://blog.csdn.net/dslinmy/article/details/38016831">C# Java間進行RSA加密解密互動(三)</a>