Je cherche à mettre en œuvre une application en obtenant Twitter authorization via Oauth en Java. La première étape est getting a request token. Voici un Python example pour le moteur de l'application. Pour tester mon code, j'exécute Python et je vérifie la sortie avec Java. Voici un exemple de Python générer un message basé Hash code d'authentification (HMAC):Comment générer un HMAC en Java équivalent à un exemple Python?
#!/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]
Sortie:
$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
Comment peut-on reproduire ce exemple en Java?
j'ai vu un example of HMAC en 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) {
}
Il utilise javax.crypto.Mac, tout bon. Cependant, les constructeurs SecretKey prennent des octets et un algorithme.
Quel est l'algorithme dans l'exemple Python? Comment peut-on créer une clé secrète Java sans algorithme?
bon! Merci. – dfrankow
@Bruno salut, pourriez-vous expliquer comment puis-je "zéro pad" la clé secrète ici si elle est plus petite que la taille de bloc recommandée, ce qui est 160 bits pour SHA1 tnx – Spring
Merci beaucoup, bon exemple. Pour l'enregistrement cependant, je pense que vous changez définitivement votre exemple de code avec le codec Apache Commons ou l'encodeur Guava;) – Brice