我正在实现Bing Cashback。为了验证来自Bing的传入请求是否有效,它们提供了签名。签名是使用RSA加密的URL的160位SHA-1哈希。

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

如微软所说,有没有一种方法可以创建解密哈希所需的Java key 对象?

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

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

最佳答案

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);

10-05 18:48