我的应用程序有Java和.NET客户端,并且我的应用程序是用.NET编写的
对于字符串,假设"Achinth Anand Gurkhi“,Java RSA加密方法将生成以下加密字符串:
e8s2Ap3R1AwoaKB7OPCwkf0vhAVGaQisdoq2Yo0BvwcQ7v3oVtMOVc5wsnIyNVOSZV543imwIiBer0HSXRe8PoBD4jj0tTxtLA+bdoR40oQJD2UmZ4OpAH3g92wLXYd4bVvjllcCPPc0tSr/nzEKeZHcnhf6cGpuwfKyFNbXW2vtlEfmRd+LGqlixPRlx1OnsSMNNw+u/5IBs8MauY4Uwq1Lovlgd9f/8WTOvq9ityr84vGLMRGs4wpC7+fFNk8jGuNZgoCDLZw2RqrUd8FBFvN2wCRZXnS7Wg4QjiBdmnq0OsAwK9OFwqnil7DNnDnlytlecR5oYkDhO2fC4FzFiA==对于相同的字符串,Java加密方法使用.NET程序使用的相同公钥生成以下加密字符串:
iJO4hwhXGX27jzK87X9gxzzbKpgf7FKhe6UcY7eoiCpLskOatgCMZTm0aTDuwRZGJGbZCIZt+JI9X8LxwOLmIbv5LGyDq+a8jkrPu+pDRvg2uRuKeQj2yBRcp36X+xFf61ux24NaX2RTCY9YfJcUis9NjEkL0eQ3gC79xO0vuBjaUA2oYOt0Mlr7DmKE+b0lz25J/WJuSW83g2oZOlvJ4RnsrFChu0vHnkHCQo9JVjhMc+Onj7+lbI1CDgGq4XigZrHt+j564y3sc3z0oQYfdZkF3yUZrzd3sJjd9KmryHf52eVb9/qgL2/Za1jUwTzKIOvtG/bQpR2ka7Qu1ZqbxQ==但是我的.NET解密方法使用匹配的私钥能够将两者解密回相同的字符串"Achinth Anand Gurkhi“。不同的加密字符串怎么会返回相同的值呢?
发布于 2011-05-05 14:20:18
这可能是因为Random Padding造成的。
发布于 2011-05-05 16:12:17
在这种情况下,您可能很幸运,没有被这种情况所困扰(可能是因为您的示例文件只有一个块),但是您需要确保加密器和解密器的密码模式是相同的。
在.NET中,密码模式由密码的Mode属性控制。在Java语言中,它由Cipher.getInstance()的transformation参数的第二个和第三个字段控制
两个平台的默认模式也不同( .NET中的CBC,Java中的ECB ),如果您疏于在任何一方设置模式,都可能会出错。
发布于 2011-07-18 14:04:29
您还没有指定如何在每种情况下对它们进行加密,但是标准方法是生成一个随机对称密钥,用该密钥加密消息,然后用公钥加密对称密钥,然后发送这两个密钥。因此,即使使用相同的代码,使用相同的密钥加密相同的消息也总是会产生不同的结果。这是意料之中的,这是一个功能,而不是一个bug:这意味着攻击者也无法知道你是否多次发送相同的消息。
https://stackoverflow.com/questions/5893321
复制相似问题