SHA2 Passwort-Speicher mit Java
-
09-10-2019 - |
Frage
Ich versuche, einen XML-RPC-Aufruf zu machen, die HmacSHA-256 Hashing einer bestimmten Zeichenfolge erfordert. Ich bin derzeit die Jasypt Bibliothek mit dem folgenden Code:
StandardPBEStringEncryptor sha256 = new StandardPBEStringEncryptor();
sha256.setPassword(key);
sha256.setAlgorithm("PBEWithHmacSHA2");
Auf zur Verwendung sha256.encrypt versuchen (string) ich diesen Fehler:
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
heruntergeladen ich die JCE Cryptography Extension und die Gläser in meinem buildpath platziert, aber das scheint nicht etwas getan zu haben. Ich habe versucht, eine Reihe von Kombinationen in setAlgorithm oben, darunter "PBE" mit "PBEWithSha". (1 | 2 | 128 | 256) ?, "PBEWithHmacSha", etc
Ich habe auch versucht BouncyCastle mit, aber ich habe kein Glück da. Jede Hilfe oder Anleitung zu schätzen!
Lösung
Wie richtig bemerkt von @Rook benötigen Sie einen PBE-Algorithmus zu bestimmen, die einen enthält Verschlüsselung Algorithmus. Zwei Beispiele von vielen sind "PBEWithSHA1AndDESede"
, die von der SunJCE Anbieter und "PBEWITHSHA256AND128BITAES-CBC-BC"
, die von der BouncyCastle JCE Provider unterstützt wird.
Andere Tipps
Die Kommentare waren hilfreich, aber ich glaube, ich war die falsche Frage. Was ich war auf der Suche zu tun war, imitieren die PHP-Funktion hash_hmac ( 'sha256', string, key) ...
Ich landete mit dem folgenden Code:
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);
}
Vielen Dank für die Führung, though. Wird sicherlich mir in der Zukunft helfen.