導航:首頁 > 編程語言 > javaandroidrsa加密

javaandroidrsa加密

發布時間:2025-07-27 09:13:19

androidjava webservice RSA處理的不同

android和java webservice RSA處理的不同

1.andorid機器上生成的(密鑰對由伺服器在windows xp下生成並將公鑰發給客戶端保存)密碼無法在伺服器通過私鑰解密。

2.為了測試,在伺服器本地加解密正常,另外,在android上加解密也正常,但是在伺服器中加密(使用相同公鑰)後的密碼同樣無法在android系統解密(使用相同私鑰)。
3.由於對RSA加密演算法不了解,而且對Java RSA的加密過程也不清楚、谷歌一番,才了解到可能是加密過程中的填充字元長度不同,這跟加解密時指定的RSA演算法有關系。
4. 比如,在A機中使用標准RSA通過公鑰加密,然後在B系統中使用「RSA/ECB/NoPadding」使用私鑰解密,結果可以解密,但是會發現解密後的原文前面帶有很多特殊字元,這就是在加密前填充的空字元;如果在B系統中仍然使用標準的RSA演算法解密,這在相同類型的JDK虛擬機環境下當然是完全一樣的,關鍵是android系統使用的虛擬機(dalvik)跟SUN標准JDK是有所區別的,其中他們默認的RSA實現就不同。
5.更形象一點,在加密的時候加密的原文「abc」,直接使用「abc」.getBytes()方法獲得的bytes長度可能只有3,但是系統卻先把它放到一個512位的byte數組里,new byte[512],再進行加密。但是解密的時候使用的是「加密後的密碼」.getBytes()來解密,解密後的原文自然就是512長度的數據,即是在「abc」之外另外填充了500多位元組的其他空字元。

② android和java webservice RSA處理的不同

1.最近做RSA加密用於增強android客戶機與伺服器(JavaEE)數據傳輸的安全性。發現在andorid機器上生成的(密鑰對由伺服器在windows xp下生成並將公鑰發給客戶端保存)密碼無法在伺服器通過私鑰解密。

2.為了測試,在伺服器本地加解密正常,另外,在android上加解密也正常,但是在伺服器中加密(使用相同公鑰)後的密碼同樣無法在android系統解密(使用相同私鑰)。

3.由於對RSA加密演算法不了解,而且對Java RSA的加密過程也不清楚、谷歌一番,才了解到可能是加密過程中的填充字元長度不同,這跟加解密時指定的RSA演算法有關系。

4.比如,在A機中使用標准RSA通過公鑰加密,然後在B系統中使用「RSA/ECB/NoPadding」使用私鑰解密,結果可以解密,但是你會發現解密後的原文前面帶有很多特殊字元,這就是在加密前填充的空字元;如果在B系統中仍然使用標準的RSA演算法解密,這在相同類型的JDK虛擬機環境下當然是完全一樣的,關鍵是android系統使用的虛擬機(dalvik)跟SUN標准JDK是有所區別的,其中他們默認的RSA實現就不同。

5.更形象一點,在加密的時候加密的原文「abc」,你直接使用「abc」.getBytes()方法獲得的bytes長度可能只有3,但是系統卻先把它放到一個512位的byte數組里,new byte[512],再進行加密。但是解密的時候你使用的是「加密後的密碼」.getBytes()來解密,解密後的原文自然就是512長度的數據,即是在「abc」之外另外填充了500多位元組的其他空字元。

引用:

Afters some hours of trying, confirming that the key pairs are the same, using different options of saving the public key in the Android filesystem, etc. I finally found a post stating that Android is using the Bouncycastle Security provider. Bouncycastle』s default RSA implementation is: 「RSA/None/NoPadding」, whereas Sun』s default security provider implementation is 「RSA/None/PKCS1Padding」. So, no decryption possible when just using

Cipher.getInstance("RSA")
because of the different paddings used.

So for a solution I downloaded the bouncycastle Jar, added bounycastle as a Security provider to my Java App, and now use

Cipher.getInstance("RSA", "BC");
It works fine now.

EOF.這位仁兄分析說android系統的RSA實現是"RSA/None/NoPadding",而標准JDK實現是"RSA/None/PKCS1Padding" ,這造成了在android機上加密後無法在伺服器上解密的原因(伺服器使用的是SUN JDK6.0)。

我自己的總結:其實只要載入bouncycastle Jar到PC服務端和android客戶端即可。

另外

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",
new org.bouncycastle.jce.provider.BouncyCastleProvider());

所有getInstantce方法里必須寫成如上形式才可。

閱讀全文

與javaandroidrsa加密相關的資料

熱點內容
怎麼能找到游戲主角文件夾 瀏覽:33
惡魔城java 瀏覽:539
javaredis訂閱 瀏覽:340
源碼編緝器怎麼做計算題 瀏覽:952
android經典布局 瀏覽:237
php54redis擴展 瀏覽:698
美國手機伺服器地址 瀏覽:603
承台連系梁加密嗎 瀏覽:689
cad2010畫圖命令浮框 瀏覽:677
成都溯源碼燕窩禮品 瀏覽:305
蘋果app里有錢怎麼轉區 瀏覽:336
cmfcpdf 瀏覽:652
ios單片機串口 瀏覽:702
修改phpfpm用戶 瀏覽:604
python正則模塊教學 瀏覽:464
宅兔的app叫什麼 瀏覽:790
phpstormlinux破解 瀏覽:519
跑馬燈的設計單片機 瀏覽:520
吉他書pdf 瀏覽:346
c圖形與游戲編程基礎pdf 瀏覽:436