首页 文章

Java / .NET中的RSA加密和.NET中的解密

提问于
浏览
3

我的应用程序有Java和.NET客户端,我的应用程序是.NET . 我的客户将发送一个使用RSA公钥加密的XML文件,我需要使用.NET解密它

对于字符串说“Achinth Anand 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解密方法能够将两者解密回相同的字符串“Achinth Anand Gurkhi” . 不同的加密字符串如何返回相同的值?

4 回答

  • 1

    它可能因为Random Padding而发生 .

  • 1

    你可能在这种情况下很幸运并且没有被这种情况所困扰(可能因为你的示例文件只有一个块)但是你需要确保加密器和解密器的密码模式是相同的 .

    在.NET中,密码模式由密码的 Mode 属性控制 . 在Java中,它由 Cipher.getInstance()transformation 参数的第二个和第三个字段控制

    默认模式在两个平台(.NET中的CBC,Java中的ECB)之间也有所不同,如果您忽略在任一侧设置模式,它可能会使您失望 .

  • 7

    您没有指定在每种情况下如何加密它们,但标准方法是生成随机对称密钥,使用该密钥加密消息,然后使用公钥加密对称密钥,并发送两者 . 因此,使用相同的密钥加密相同的消息将始终给出不同的结果,即使使用相同的代码 . 这是预期的,它是一个功能,而不是一个错误:这意味着攻击者无法判断您是否多次发送相同的消息 .

  • -1

    据我所知,公钥/私钥对如下:

    使用公钥对数据进行加密 . 使用私钥解密 . 即公钥和私钥彼此相反 .

    在通信通道之间,一端(源)与另一端(dest)共享公钥 . 现在,源使用私钥加密其数据并将其发送到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

    有什么意见/建议吗?

相关问题