Sha2 Пароль Хранение с Java
-
09-10-2019 - |
Вопрос
Я пытаюсь сделать вызов 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);
}
Спасибо за руководство, хотя. Обязательно поможет мне в будущем.