Хранение пароля SHA2 с Java - PullRequest
       32

Хранение пароля SHA2 с Java

2 голосов
/ 21 октября 2010

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

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

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

Exception in thread "main" org.jasypt.exceptions.EncryptionInitializationException: java.security.NoSuchAlgorithmException: PBEWithHmacAndSHA256 SecretKeyFactory not available
     at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:597)
     at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.initialize(StandardPBEStringEncryptor.java:488)
     at org.jasypt.encryption.pbe.StandardPBEStringEncryptor.encrypt(StandardPBEStringEncryptor.java:541)
     at nysenateapi.XmlRpc.main(XmlRpc.java:52)
    Caused by: java.security.NoSuchAlgorithmException: PBEWithHmacAndSHA256 SecretKeyFactory not available
     at javax.crypto.SecretKeyFactory.(DashoA13*..)
     at javax.crypto.SecretKeyFactory.getInstance(DashoA13*..)
     at org.jasypt.encryption.pbe.StandardPBEByteEncryptor.initialize(StandardPBEByteEncryptor.java:584)
     ... 3 more

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

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

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

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

1 голос
/ 22 октября 2010

Комментарии были полезны, но я думаю, что задавал неправильный вопрос.Я хотел подражать PHP-функции hash_hmac ('sha256', string, key) ...

В итоге я использовал следующий код:

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

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

...