Wie wird ein HMAC in Java generiert, der einem Python-Beispiel entspricht?

Ich freue mich auf die Implementierung einer App bekommenTwitter-Autorisierung über Oauth in Java. Der erste Schritt istAnfragetoken erhalten. Hier ist einPython-Beispiel für App Engine.

Um meinen Code zu testen, führe ich Python aus und überprüfe die Ausgabe mit Java. Hier ist ein Beispiel für Python, das einen Hash-basierten Nachrichtenauthentifizierungscode (HMAC) generiert:

#!/usr/bin/python

from hashlib import sha1
from hmac import new as hmac

key = "qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50"
message = "foo"

print "%s" % hmac(key, message, sha1).digest().encode('base64')[:-1]

Ausgabe

$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=

Wie repliziert man dieses Beispiel in Java?

Ich habe ein @ geseheispiel für HM in Java:

try {
    // Generate a key for the HMAC-MD5 keyed-hashing algorithm; see RFC 2104
    // In practice, you would save this key.
    KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
    SecretKey key = keyGen.generateKey();

    // Create a MAC object using HMAC-MD5 and initialize with key
    Mac mac = Mac.getInstance(key.getAlgorithm());
    mac.init(key);

    String str = "This message will be digested";

    // Encode the string into bytes using utf-8 and digest it
    byte[] utf8 = str.getBytes("UTF8");
    byte[] digest = mac.doFinal(utf8);

    // If desired, convert the digest into a string
    String digestB64 = new sun.misc.BASE64Encoder().encode(digest);
} catch (InvalidKeyException e) {
} catch (NoSuchAlgorithmException e) {
} catch (UnsupportedEncodingException e) {
}

Es verwendet javax.crypto.Mac, alles gut. DasGeheimer Schlüsse Konstruktoren benötigen Bytes und einen Algorithmus.

Wie lautet der Algorithmus im Python-Beispiel? Wie kann man einen Java Secret Key ohne Algorithmus erstellen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage