Создание ключей RSA от известных параметров в Java

Я работаю над реализацией Кешбэка Bing. Для проверки входящего запроса от Bing как допустимого, они обеспечивают подпись. Подпись является 160-разрядным хешем SHA-1 URL, зашифрованного с помощью RSA.

Microsoft обеспечивает "открытый ключ" RSA, модуль и экспоненту, с которой я, как предполагается, дешифрую хеш.

Существует ли способ создать ключевые объекты Java, должен был дешифровать хеш, как заявляет Microsoft?

Все, что я могу найти, создает пары ключей RSA автоматически, так как это - то, как RSA, как предполагается, работает. Я действительно хотел бы использовать объекты Java, если бы вообще возможный, так как это, очевидно, более надежно, чем рука, кодировал решение.

Пример кода, который они обеспечили, находится в.NET и использует библиотечную функцию.NET для проверки хеша. Конкретно RSACryptoServiceProvider. VerifyHash ()

15
задан meleager 7 January 2010 в 20:50
поделиться

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);
28
ответ дан 1 December 2019 в 02:10
поделиться

Используйте java.security.spec.RSAPublicKeySpec. Он может построить ключ из экспоненты и модуля. Затем используйте java.security.keyFactory.generatePublic() с ключевым параметром spec.

.
2
ответ дан 1 December 2019 в 02:10
поделиться

Что-то вроде этого должно помочь:

  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 для получения дополнительной информации.

0
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: