Estoy buscando implementar una aplicación que obtenga Twitter authorization via Oauth en Java. El primer paso es getting a request token. Aquí hay un Python example para el motor de la aplicación.¿Cómo generar un HMAC en Java equivalente a un ejemplo de Python?
Para probar mi código, estoy ejecutando Python y comprobando los resultados con Java. Aquí está un ejemplo de Python generar un mensaje Hash-Based Authentication Code (HMAC):
#!/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]
Salida:
$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
¿Cómo funciona un replicar este ejemplo en Java?
He visto 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) {
}
Utiliza javax.crypto.Mac, todo bien. Sin embargo, los constructores SecretKey toman bytes y un algoritmo.
¿Cuál es el algoritmo en el ejemplo de Python? ¿Cómo se puede crear una clave secreta de Java sin un algoritmo?
buena! Gracias. – dfrankow
@Bruno hola, podría explicar cómo puedo "cero almohadilla" la clave secreta aquí si es más pequeña que el tamaño de bloque recomendado, que es de 160 bits para SHA1 tnx – Spring
Muchas gracias, gran ejemplo. Sin embargo, para el registro, creo que definitivamente cambias la muestra de tu código con el Apache Commons Codec o el codificador Guava;) – Brice