哈希匹配Java SHA2输出与MySQL SHA2输出
当我通过以下代码复制SHA2哈希时:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.digest("A".getBytes("UTF-8"));
它给了我一个字节数组,它是:85,-102,-22,-48,-126100,-43121,93,57,9113,-116,-35,5,-85,-44,-107114,-24,79,-27,85,-112,-18,-13,26,-120,-96,-113,-33,-3
但当我通过MySQL复制相同的散列时,它会给我一个字符串:5cfe2cdbb9940fb4d8505e25ea77e763a0077693db01b1a6aa94f2
如何转换Java的结果以便与MySQL的结果进行比较
# 1 楼答案
首先查看您的DB结果—看起来您的初始哈希实际上是SHA-224而不是SHA-256:
而不是:
从这里开始,您就进入了正确的轨道,您只需要将byte[]输出转换为十六进制字符串
输出:
# 2 楼答案
Integer.toHexString(0XFF & i)
必须替换为String.format("%02x", 0XFF & i)
,否则它只生成1个字符的输出,而需要2个字符