一尘不染

相当于php的hmac-SHA1的java

php

我正在寻找一个等效于此php调用的Java:

hash_hmac('sha1', "test", "secret")

我使用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());
}

键=“ secret”和test =“ test”的输出似乎不匹配。


阅读 364

收藏
2020-05-29

共1个答案

一尘不染

实际上,他们确实同意。
正如Hans Doggen已经指出的那样,除非将raw输出参数设置为true,否则PHP使用十六进制表示法来输出消息摘要。
如果要在Java中使用相同的符号,可以使用类似

for (byte b : digest) {
    System.out.format("%02x", b);
}
System.out.println();

相应地格式化输出。

2020-05-29