2011-05-05 180 views
3

我的應用程序的Java和.NET客戶端和我的應用程序是在.NET。我的客戶會送我使用RSA公鑰加密的XML文件,我需要使用.NETRSA加密用Java/.NET和解密.NET

的字符串進行解密說:「Achinth阿南德Gurkhi」在Java RSA加密方法生成以下加密字符串:

e8s2Ap3R1AwoaKB7OPCwkf0vhAVGaQisdoq2Yo0BvwcQ7v3oVtMOVc5wsnIyNVOSZV543imwIiBer0HSXRe8PoBD4jj0tTxtLA+bdoR40oQJD2UmZ4OpAH3g92wLXYd4bVvjllcCPPc0tSr/nzEKeZHcnhf6cGpuwfKyFNbXW2vtlEfmRd+LGqlixPRlx1OnsSMNNw+u/5IBs8MauY4Uwq1Lovlgd9f/8WTOvq9ityr84vGLMRGs4wpC7+fFNk8jGuNZgoCDLZw2RqrUd8FBFvN2wCRZXnS7Wg4QjiBdmnq0OsAwK9OFwqnil7DNnDnlytlecR5oYkDhO2fC4FzFiA== 

對相同字符串的.NET RSA加密方法生成與Java程序使用相同的公鑰以下加密字符串:

iJO4hwhXGX27jzK87X9gxzzbKpgf7FKhe6UcY7eoiCpLskOatgCMZTm0aTDuwRZGJGbZCIZt+JI9X8LxwOLmIbv5LGyDq+a8jkrPu+pDRvg2uRuKeQj2yBRcp36X+xFf61ux24NaX2RTCY9YfJcUis9NjEkL0eQ3gC79xO0vuBjaUA2oYOt0Mlr7DmKE+b0lz25J/WJuSW83g2oZOlvJ4RnsrFChu0vHnkHCQo9JVjhMc+Onj7+lbI1CDgGq4XigZrHt+j564y3sc3z0oQYfdZkF3yUZrzd3sJjd9KmryHf52eVb9/qgL2/Za1jUwTzKIOvtG/bQpR2ka7Qu1ZqbxQ== 

但使用匹配的私鑰我的.NET解密方法能夠解密都回來了o同一個字符串「Achinth Anand Gurkhi」。不同的加密字符串如何返回相同的值?

+0

我已經看到了在不同的機器上_same_公鑰.NET實現產生不同的密碼。 – Oded 2011-05-05 06:07:56

+0

相關:http://stackoverflow.com/questions/5398125/what-c​​ipher-mode-padding-defaults-or-common-uses-of-aes-encryption-would-be-used – finnw 2011-05-05 08:18:21

回答

-1

據我所知公鑰/私鑰對是這樣的:

使用公共密鑰對數據進行加密。使用私鑰解密。即公鑰和私鑰彼此相反。

之間,一個通信信道,一個端(源極)與共享的另一端(目標)的公共密鑰。現在源使用私鑰加密其數據並將其發送到dest。 Dest應用來源的共享公鑰來解密它。

這裏可能什麼:.NET和JAVA的私鑰是不同的,但相應的公共密鑰必須是相應的私鑰的倒數。

這些按鍵可以採取主機名/ IP /或任何東西(我不知道)考慮在內,以生成公鑰/私鑰對。
The public key encrytion needs two keys which are inverse of each other but not necessarily the encrypted data be same

任何意見/建議?

1

在這種情況下,您可能很幸運,並且沒有被此刻咬過(可能是因爲您的示例文件只有一個塊),但您需要確保加密器和解密器的密碼模式相同。

在.NET的加密模式由密碼的Mode屬性控制。在Java中它是由transformation參數的Cipher.getInstance()

默認模式也不同的兩個平臺(CBC在.NET,ECB在Java中)之間的第二和第三字段控制其可你絆倒如果忽視設置在任何一方的模式。

1

您還沒有指定您如何在各種情況下加密他們,但標準方法是生成一個隨機的對稱密鑰,用該密鑰加密消息,然後加密與公鑰對稱密鑰,並將其發送。因此,即使使用相同的密碼,使用相同的密鑰加密相同的消息總是會給出不同的結果。這是預期的,這是一個功能,而不是一個錯誤:這意味着,如果你在相同的消息多次發送任何攻擊者無法分辨。