Tôi đang xem xét việc triển khai ứng dụng nhận được Twitter authorization via Oauth trong Java. Bước đầu tiên là getting a request token. Đây là Python example cho công cụ ứng dụng.Làm thế nào để tạo ra một HMAC trong Java tương đương với một ví dụ Python?
Để kiểm tra mã của tôi, tôi đang chạy Python và kiểm tra đầu ra bằng Java. Dưới đây là một ví dụ về Python tạo ra một tin nhắn 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]
Output:
$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
Làm thế nào để một lặp lại ví dụ này trong Java?
Tôi đã nhìn thấy một example of HMAC trong 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) {
}
Nó sử dụng javax.crypto.Mac, tất cả đều tốt. Tuy nhiên, các nhà xây dựng SecretKey mất byte và một thuật toán.
Thuật toán trong ví dụ Python là gì? Làm cách nào để tạo khóa bí mật Java mà không có thuật toán?
một tốt! cảm ơn. – dfrankow
@Bruno hi, bạn có thể giải thích làm thế nào tôi có thể "zero pad" khóa bí mật ở đây nếu nó nhỏ hơn kích thước khối được đề xuất, là 160 bit cho SHA1 tnx – Spring
Cảm ơn bạn rất nhiều, ví dụ tuyệt vời. Mặc dù vậy, đối với bản ghi, tôi nghĩ bạn chắc chắn thay đổi mẫu mã của bạn bằng Apache Commons Codec hoặc bộ mã hóa Guava;) – Brice