PHP中的PHP哈希()

时间:2014-06-08 00:07:04

标签: java php hash sha512

我目前正在尝试让Java为字符串生成与PHP hash算法相同的哈希值。

我已经足够接近了:

hash('sha512', 'password');

输出:

b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86

Java代码:

public static void main(String[] args) {
    hash("password");
}

private static String hash(String salted) {
    byte[] digest;
    try {
        MessageDigest mda = MessageDigest.getInstance("SHA-512");
        digest = mda.digest(salted.getBytes("UTF-8"));
    } catch (Exception e) {
        digest = new byte[]{};
    }

    String str = "";
    for (byte aDigest : digest) {
        str += String.format("%02x", 0xFF & aDigest);
    }

    return str;
}

输出相同的内容。

我的问题是当我在PHP hash函数中使用第三个参数时。在PHP's site上,它描述如下:

raw_output
    When set to TRUE, outputs raw binary data. FALSE outputs lowercase hexits.

我不太确定如何实现这个额外的参数。我认为主要是我的问题是,如何将String对象转换为二进制String对象?目前,使用PHP运行它会生成以下内容:http://sandbox.onlinephpfunctions.com/code/a1bd9b399b3ac0c4db611fe748998f18738d19e3

1 个答案:

答案 0 :(得分:0)

这应该会从您的链接中重现结果:

String strBinary = null;
try {
    strBinary = new String(digest, "UTF-8");
} catch (UnsupportedEncodingException e) {
}

并且您需要在文件顶部导入这些导入内容:

import java.nio.charset.Charset;
import java.io.UnsupportedEncodingException;

我希望我能正确理解你的问题。