Я ищу реализацию приложения, получающего Twitter authorization via Oauth в Java. Первым шагом является getting a request token. Ниже приведен пример Python example для приложения.Как создать HMAC в Java, эквивалентном примеру Python?
Чтобы проверить свой код, я запускаю Python и проверяю вывод с помощью Java. Вот пример Python генерации на основе хэш-код аутентификации сообщений (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]
Выход:
$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
Как один повторности этот пример в Java?
Я видел example of HMAC в 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) {
}
Он использует javax.crypto.Mac, все хорошо. Однако конструкторы SecretKey принимают байты и алгоритм.
Каков алгоритм на примере Python? Как создать секретный ключ Java без алгоритма?
хороший! Благодарю. – dfrankow
@Bruno привет, не могли бы вы объяснить, как я могу «нулевую прокладку» здесь секретного ключа, если он меньше рекомендуемого размера блока, то есть 160 бит для SHA1 tnx – Spring
Большое вам спасибо, отличный пример. Для записи, однако, я думаю, что вы определенно измените свой пример кода с помощью кодека Apache Commons или кодека Guava;) – Brice