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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top