当前位置: 首页 > 面试题库 >

相当于php的hmac-SHA1的java

汪深
2023-03-14
问题内容

我正在寻找一个等效于此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();

相应地格式化输出。



 类似资料:
  • 问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 已知Java值很好。 Java代码: Python代码: 运行Java的结果: 运行Python的结

  • 问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 Java值众所周知是好的。 Java代码: Python代码: 运行Java的结果: 运行Pytho

  • 问题内容: 我有这个字符串: 0000000020C90037:TEMP:数据 我需要这个字符串: TEMP:数据。 使用PHP,我可以这样做: 如何像在PHP中一样有效地在JavaScript中使用字符串? 问题答案: 这是您的PHP代码的直接转换:

  • 问题内容: 我正在将应用程序从PHP迁移到Java,并且在代码中大量使用了正则表达式。我遇到了PHP中似乎没有Java等效项的某些问题: 对于正则表达式中的每个匹配项,它都会调用一个函数,该函数将匹配文本作为参数传递给该函数。作为示例用法: 用Java做到这一点的理想方法是什么? 问题答案: 我不知道Java内置有什么类似的东西。您可以使用Matcher类轻松滚动自己的游戏: 然后致电: 请注意,

  • 问题内容: 真的很喜欢那个功能。 是否有与之等效的Javascript? 问题答案: 在Javascript的“较新”版本中有:解构分配-Javascript 1.7 。它可能仅在基于Mozilla的浏览器中支持,也许在Rhino中也受支持。 编辑: 实际上,如果V8 Javascript库(以及由此而来的Chrome)支持此功能,这也不会令我感到惊讶。 但也不要指望它 现在所有现代浏览器都支持(