java相当于php的hmac-SHA1
我正在寻找与此 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());
}
key = "secret" 和 test = "test" 的输出似乎不匹配。
I'm looking for a java equivalent to this php call:
hash_hmac('sha1', "test", "secret")
I tried this, using java.crypto.Mac, but the two do not agree:
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());
}
The outputs with key = "secret" and test = "test" do not seem to match.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
事实上他们确实同意。
正如 Hans Doggen 已经指出的那样,PHP 使用十六进制表示法输出消息摘要,除非您将原始输出参数设置为 true。
如果您想在 Java 中使用相同的表示法,您可以使用类似的方法
来相应地格式化输出。
In fact they do agree.
As Hans Doggen already noted PHP outputs the message digest using hexadecimal notation unless you set the raw output parameter to true.
If you want to use the same notation in Java you can use something like
to format the output accordingly.
你可以在 Java 中尝试一下:
You can try this in Java:
这是我的实现:
This is my implementation :
在我看来,PHP 对 Java 生成的字节使用十六进制表示法 (1a = 26) - 但我没有检查整个表达式。
如果通过此页面上的方法运行字节数组,会发生什么情况?
Seems to me that PHP uses HEX notation for the bytes that Java produces (1a = 26) - but I didn't check the whole expression.
What happens if you run the byte array through the method on this page?
我的 HmacMD5 实现 - 只需将算法更改为 HmacSHA1:
My implementation for HmacMD5 - just change algorithm to HmacSHA1:
这样我就可以得到与 php 中使用 hash_hmac 得到的完全相同的字符串
This way I could get the exact same string as I was getting with hash_hmac in php
还没有测试过,但是试试这个:
这是我的方法的快照,它使java的md5和sha1与php匹配。
Haven't tested it, but try this:
This is snapshot from my method that makes java's md5 and sha1 match php.