我目前正在尝试让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
答案 0 :(得分:0)
这应该会从您的链接中重现结果:
String strBinary = null;
try {
strBinary = new String(digest, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
并且您需要在文件顶部导入这些导入内容:
import java.nio.charset.Charset;
import java.io.UnsupportedEncodingException;
我希望我能正确理解你的问题。