Создание ключей RSA из известных параметров в Java
Я работаю над реализацией Bing Cashback. Чтобы проверить входящий запрос от Bing как действительный, они предоставляют подпись. Подпись представляет собой 160-битный хэш SHA-1 url, зашифрованный с помощью RSA.
Microsoft предоставляет RSA "открытый ключ", модуль и показатель, с помощью которого я должен расшифровать хэш.
есть ли способ создать ключевые объекты Java, необходимые для расшифровки хэша, как говорит Microsoft?
все, что я могу найти, создает ключ RSA пары автоматически, так как именно так должна работать RSA. Я бы очень хотел использовать объекты Java, если это вообще возможно, так как это, очевидно, более надежно, чем ручное решение.
пример кода они предоставляются .NET и использует .Чистая библиотечную функцию для проверки хэша. В Частности, RSACryptoServiceProvider.VerifyHash()
3 ответов
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);
используйте java.безопасность.спекуляция.RSAPublicKeySpec. Он может построить ключ из экспоненты и модуля. Затем используйте java.безопасность.KeyFactory.generatePublic () с ключевой спецификацией в качестве параметра.
что-то вроде этого должно сделать трюк:
private PublicKey convertPublicKey(String publicKey) throws Exception{
PublicKey pub = null;
byte[] pubKey = Hex.decodeHex(publicKey.toCharArray());
X509EncodedKeySpec pubSpec = new X509EncodedKeySpec(pubKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
pub = (RSAPublicKey) keyFactory.generatePublic(pubSpec);
return pub;
}
это предполагает, что открытый ключ задан как шестнадцатеричная строка, и вам понадобится библиотека кодеков Apache Commons
Если у вас есть ключ в другой формат, попробуйте KeyFactory для получения дополнительной информации.