我正在将一些 Java 代码移植到 PHP 代码。在Java中我有一个哈希SHA256代码如下:
public static String hashSHA256(String input)
throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
byte[] shaByteArr = mDigest.digest(input.getBytes(Charset.forName("UTF-8")));
StringBuilder hexStrBuilder = new StringBuilder();
for (int i = 0; i < shaByteArr.length; i++) {
hexStrBuilder.append(Integer.toHexString(0xFF & shaByteArr[i]));
}
return hexStrBuilder.toString();
}
在 PHP 中,我散列如下:
$hash = hash("sha256", utf8_encode($input));
我用两者运行示例代码输入=“测试”。但是,我得到了 2 个不相同的哈希字符串:
Java: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2bb822cd15d6c15b0f0a8
PHP: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
有人可以向我解释为什么以及如何让它们相互匹配吗?请注意,我无法修改Java实现代码,只能修改PHP。
万分感激!
PHP版本正确; SHA-256 校验和test is 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
.
Java 版本返回相同的校验和,其中有两个0
被剥离了。这是因为您将字节转换为十六进制的方式。代替&
荷兰国际集团与他们0xFF
, use String.format()
, as in 这个答案 https://stackoverflow.com/a/2817883/2765666:
hexStrBuilder.append(String.format("%02x", shaByteArr[i]));
我知道你说你不能修改Java代码,但它是不正确!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)