2011-05-05 181 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

您还没有指定您如何在各种情况下加密他们,但标准方法是生成一个随机的对称密钥,用该密钥加密消息,然后加密与公钥对称密钥,并将其发送。因此,即使使用相同的密码,使用相同的密钥加密相同的消息总是会给出不同的结果。这是预期的,这是一个功能,而不是一个错误:这意味着,如果你在相同的消息多次发送任何攻击者无法分辨。