首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SHA256输出不同的哈希到PHP SHA256?

Java SHA256输出不同的哈希到PHP SHA256?
EN

Stack Overflow用户
提问于 2011-01-13 21:41:29
回答 3查看 13.4K关注 0票数 10

PHP代码:

echo hash('sha256', 'jake');

PHP输出:

cdf30c6b345276278bedc7bcedd9d5582f5b8e0c1dd858f46ef4ea231f92731d

Java代码:

代码语言:javascript
复制
String s = "jake";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(s.getBytes(Charset.forName("UTF-8")));
byte[] hashed = md.digest();
String s2 = "";
for (byte b : hashed) {
    s2 += b;
}
System.out.println(s2);

Java输出:

-51-1312107528211839-117-19-57-68-19-39-43884791-1141229-4088-12110-12-223531-11011529

我原以为这两个函数会返回相同的结果。显然,事实并非如此。我如何才能使两者匹配,或者这是不可能的?

编辑:我犯了一个错误,我想我现在已经有了问题的答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-13 21:44:17

你需要做的第一件事就是使用一致的字符串编码。我不知道PHP会做什么,但是"jake".getBytes()会使用你的平台的默认编码。这真是个坏主意。假设PHP一开始就要处理Unicode字符串,那么使用UTF-8可能是一个好的开始。(如果没有,您需要弄清楚它在做什么,并尝试使两者保持一致。)在Java语言中,使用接受CharsetString.getBytes()重载或接受Charset名称的重载。(就我个人而言,我喜欢使用芭乐的Charsets.UTF_8。)

然后说服PHP也使用UTF-8。

然后以十六进制输出Java结果。我非常怀疑您给出的代码是不是您正在运行的实际代码,否则我会期望输出"[B@e48e1b“这样的输出。无论您如何将字节数组转换为字符串,请将其更改为使用十六进制。

票数 13
EN

Stack Overflow用户

发布于 2011-01-13 21:50:20

他们正在打印相同的..将您的byte[]转换为十六进制字符串,然后您也会看到CDF30C6B345276278BEDC7BCEDD9D5582F5B8E0C1DD858F46EF4EA231F92731D作为Java输出:

代码语言:javascript
复制
public void testSomething() throws Exception {
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update("jake".getBytes());
    System.out.println(getHex(md.digest()));
}

static final String HEXES = "0123456789ABCDEF";
public static String getHex( byte [] raw ) {
    if ( raw == null ) {
      return null;
    }
    final StringBuilder hex = new StringBuilder( 2 * raw.length );
    for ( final byte b : raw ) {
      hex.append(HEXES.charAt((b & 0xF0) >> 4))
         .append(HEXES.charAt((b & 0x0F)));
    }
    return hex.toString();
}
票数 6
EN

Stack Overflow用户

发布于 2011-01-13 21:44:32

在打印之前,您需要将摘要转换为十六进制字符串。示例代码可以在here中找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4680661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档