在 Java 中从已知参数创建 RSA 密钥

2022-09-02 23:44:28

我正在努力实施必应现金返还。为了验证来自必应的传入请求是否有效,他们提供了签名。签名是使用 RSA 加密的 URL 的 160 位 SHA-1 哈希。

微软提供了RSA“公钥”,模数和指数,我应该用它来解密哈希。

有没有办法像微软所说的那样创建解密哈希所需的Java密钥对象?

我能找到的所有内容都会自动创建RSA密钥对,因为这就是RSA的工作方式。如果可能的话,我真的很想使用Java对象,因为这显然比手工编码的解决方案更可靠。

他们提供的示例代码位于 .NET 中,并使用 .NET 库函数来验证哈希。特别是 RSACryptoServiceProvider.VerifyHash()


答案 1
RSAPublicKeySpec spec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory factory = KeyFactory.getInstance("RSA");
PublicKey pub = factory.generatePublic(spec);
Signature verifier = Signature.getInstance("SHA1withRSA");
verifier.initVerify(pub);
verifier.update(url.getBytes("UTF-8")); // Or whatever interface specifies.
boolean okay = verifier.verify(signature);

答案 2

Use java.security.spec.RSAPublicKeySpec.它可以从指数和模数构造一个键。然后使用 java.security.KeyFactory.generatePublic() 和 key spec 作为参数。


推荐