.NET和java的RSA互通,僅此而已

lubiaopan發表於2011-03-09

.NETjavaRSA互通,僅此而已

在開始這篇文章之前,先請讀者朋友閱讀老唐的這兩篇文章:

1Java.Net環境下RSA加密解密互動不成功的問題解決

2Java.Net環境下RSA加密解密互動不成功的問題解決【續】

和我的這篇文章

3.NET_RSA加密全接觸(重、難點解析)

 

         前面老唐的兩篇文章中提到,要想實現.NETJavaRSA互通,只能拋棄.NET現有的加密演算法,而是利用 http://www.codeproject.com/csharp/biginteger.asp 專案中的BigInteger類(.NET Framework4中已增加了這個類的實現,在System.Numberic名稱空間中),這個BigInteger類實際上就是仿照著javaBigInteger類來寫的。

利用這個類的確可以很好的實現RSA的加解密,比如,在.NET端,構建一個公鑰對應的BigInteger  e、一個模對應的BigInteger n和一個明文對應的BigInteger  m,然後執行語句BigInteger c=m.modPow(e,n),便可以實現加密操作,密文為c,這樣的加密是標準加密,沒有附加任何填充演算法的加密。

老唐的文章中說,不能互通是因為加密標準不一樣,導致一方加密而另一方不能解密,其實不然,.NET採用的加密標準是PKCS1Padding(或OAEPPadding——只支援XP以上版本),這也是我在前面一篇文章中提到的一種填充演算法,而java同樣支援這一填充標準,既然可以遵循統一的標準,那麼.NETjavaRSA互通,無需新增任何新程式碼便可以輕鬆實現!

請看下面的示例(.NET端加密,Java端解密):

Java端程式碼:

 

Java端演示截圖

 

.NET端程式碼:

.NET端演示截圖:

 

接下來的示例是(java端加密,.NET端解密):

.net端程式碼:

Java端程式碼:

  

相關文章