在.NET中实现RSA公钥/私钥解密到Java/Spring

Posted

技术标签:

【中文标题】在.NET中实现RSA公钥/私钥解密到Java/Spring【英文标题】:Implement RSA Public / Private key decryption in .NET to Java / Spring 【发布时间】:2016-07-24 05:40:03 【问题描述】:

我正在尝试将应用程序从 .NET 移植到 Spring 4 (Java)。如何在 Java 中对之前使用 .NET RSACryptoServiceProvider 加密的密码进行解密?我来自 Java 背景。

我有一个来自 .NET 的 privatekey.xml 文件。这是私钥样本代码:

<RSAKeyValue>
<Modulus>dfgkjkdfg99444</Modulus>
<Exponent>ABCD</Exponent>
<P>dadskfkkeej3434j==</P>
<Q>sdakfksa/sdfd/sdf3wfsd==</Q>
<DP>sdERfdsf333==</DP>
<DQ>sdfsd222sdfEWEf==</DQ>
<InverseQ>kadkfimmds+/sdkks+/sdfsdkKKD==</InverseQ>
<D>sdfsadfsadfsadfdsafasdfsadfsadfdsafdsf=</D>
</RSAKeyValue>

问题:

其中的实际私钥在哪里? 我可以用它作为盐来解密加密的文本吗?如何使用此私钥在 Java 中编写解密函数? Java中是否已经有一个接受这些参数的函数?有什么例子吗?

我已经阅读了许多关于 RSA 的理论文章。但对理解这种情况没有帮助。因此,Java 中专门处理这种情况的示例代码、Java 中的对应示例、有用文章的链接等将非常有帮助。

【问题讨论】:

【参考方案1】:

您有一个包含构成私钥的元素的 XML。这些元素是 base 64 编码的。 base 64 解码为字节数组。这些字节数组依次代表大或小整数编码数字。所有值共同构成私钥。

显然你已经改变了这些值本身,所以再往前走会相当棘手。

所以基本上你需要执行以下步骤:

解析 XML; 检索编码元素; base 64 将这些元素解码为字节数组; 将数组转换为BigInteger 值 将值放入RSAPrivateCrtKeySpec 将规范输入"RSA" KeyFactory

由于您还拥有私有 D 值,因此您也可以使用 RSAPrivateyKeySpec,但生成的 RSA 操作可能会更慢。

【讨论】:

感谢您的步骤有效。除了我不必反转字节数组。还在这里找到了一些工作示例:***.com/questions/36599453/… 和 ***.com/questions/5527423/…

以上是关于在.NET中实现RSA公钥/私钥解密到Java/Spring的主要内容,如果未能解决你的问题,请参考以下文章

如何解密 .NET 中的 RSA 内容?

怎么在ios进行rsa公钥加密,java做rsa私钥解密

Delphi RSA加解密 (RSA公钥加密,私钥解密)(RSA私钥加密,公钥解密)MD5加密SHA加密

openssl rsa 可以用私钥加密 公钥解密吗

RSA 私钥是不是始终包含公钥,还是只是 .NET?

android rsa加解密私钥和公钥怎么用