我正在寻找一个等效于此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”的输出似乎不匹配。
实际上,他们确实同意。 正如Hans Doggen已经指出的那样,除非将raw输出参数设置为true,否则PHP使用十六进制表示法来输出消息摘要。 如果要在Java中使用相同的符号,可以使用类似
for (byte b : digest) { System.out.format("%02x", b); } System.out.println();
相应地格式化输出。