Вопрос

Я пытаюсь сделать вызов XML-RPC, который требует перемешивания HMACSHA-256 определенной строки. В настоящее время я использую библиотеку Jasypt со следующим кодом:

StandardPBEStringEncryptor sha256 = new StandardPBEStringEncryptor();
          sha256.setPassword(key);
          sha256.setAlgorithm("PBEWithHmacSHA2");

При попытке использовать Sha256.encrypt (String) Я получаю эту ошибку:

Исключение в потоке "Главная" org.jasypt.exceptions.engryplicationItializationexception: Java.Security.noSuchalgorithMException: PbewithhMathmacandsha256 SecrelekeyFactory не доступна в org.jasypt.encryplation.pbe.Итациализация (StandardPbebyteencryprictor.java:597) в org.jasypt.javration. pbe.standardpbbestringCryptor.initialize (StandardPBESTRINGRYPRIPTOR.java:488) на org.jasypt.encryption.pbe.pandardpbbestringcriptyptor.encrypt (StandardPbbestringCryptor.java:541) на nysenateapi.xmlrpc.main (xmlrpc.java:52), вызванных: java.security .NOSUCHALGORITHMEXCECTION: PBEWITHEHMACANDSHA256 SecreleKeyFactory не доступна в javax.crypto.secretkeylefactory. (Dashoa13 * ..) в javax.crypto.secretkekefactory.grypto.secretcelecture (dashoa13 * ..) на org.jasypyteencypryptor.initialize : 584) ... еще 3

Я скачал расширение криптографии JCE и поместил банки в мою сборку, но, похоже, что ничего не сделали. Я пробовал использовать ряд комбинаций в Setalgorithm выше, включая «PBE», «pbewithsha» (1 | 2 | 128 | 256)?, "Pbewithhmacsha" и т. Д.

Я также пытался использовать BounCycaCtle, но мне тоже не повезло. Любая помощь или руководство оценили!

Это было полезно?

Решение

Как правильно отмечено @roook, вам нужно указать алгоритм PBE, который включает в себя шифрование алгоритм. Два примера из многих "PBEWithSHA1AndDESede" который поддерживается Sunjce Provider и "PBEWITHSHA256AND128BITAES-CBC-BC" который поддерживается поставщиком BouncycaCtle JCE.

Другие советы

Комментарии были полезны, но я думаю, что я спрашивал не тот вопрос. Что я искал, чтобы сделать, это имитирует функцию php hash_hmac ('sha256', строка, ключ) ...

Я закончил использовать следующий код:

Mac mac = Mac.getInstance("HmacSha256");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), "HmacSha256");
mac.init(secret);
byte[] shaDigest = mac.doFinal(phrase.getBytes());
String hash = "";
for(byte b:shaDigest) {
    hash += String.format("%02x",b);
}

Спасибо за руководство, хотя. Обязательно поможет мне в будущем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top