相关疑难解决方法(0)

如何在Java中生成HMAC等效于Python示例?

我正在寻找通过 Java中的Oauth实现一个获得Twitter授权的应用程序.第一步是获取请求令牌.这是app引擎的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]
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
Run Code Online (Sandbox Code Playgroud)

如何在Java中复制此示例?

我在Java中看到过HMAC的一个例子:

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 …
Run Code Online (Sandbox Code Playgroud)

java sha1 oauth cryptoapi hmac

50
推荐指数
2
解决办法
5万
查看次数

java相当于php的hmac-SHA1

我正在寻找一个相当于这个php调用的java:

hash_hmac('sha1', "test", "secret")
Run Code Online (Sandbox Code Playgroud)

我试过这个,使用java.crypto.Mac,但两人不同意:

String mykey = "secret";
String test = "test";
try {
    Mac mac = Mac.getInstance("HmacSHA1");
    SecretKeySpec secret = new SecretKeySpec(mykey.getBytes(),"HmacSHA1");
    mac.init(secret);
    byte[] digest = mac.doFinal(test.getBytes());
    String enc = new String(digest);
    System.out.println(enc);  
} catch (Exception e) {
    System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

key ="secret"和test ="test"的输出似乎不匹配.

php java cryptography hmac

49
推荐指数
3
解决办法
4万
查看次数

标签 统计

hmac ×2

java ×2

cryptoapi ×1

cryptography ×1

oauth ×1

php ×1

sha1 ×1