【发布时间】:2011-03-02 14:34:15
【问题描述】:
当我在 Java 中使用以下方法计算字符串的 SHA-256 时
public static void main(String[] args) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest("password".getBytes());
StringBuffer sb = new StringBuffer();
for(byte b : hash) {
sb.append(Integer.toHexString(b & 0xff));
}
System.out.println(sb.toString());
}
我明白了:
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
在命令行上我执行以下操作(我需要 -n 不添加换行符):
echo -n "password" | sha256sum
得到
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
如果我们更仔细地比较这些,我会发现 2 个细微差别
5e884898da2847151d0e56f8dc6292773603dd6aabbdd62a11ef721d1542d8
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
或:
5e884898da28 47151d0e56f8dc6292773603d d6aabbdd62a11ef721d1542d8
5e884898da28 0 47151d0e56f8dc6292773603d 0 d6aabbdd62a11ef721d1542d8
这两个哪个是正确的?
结果:都是,但我错了……
通过使用修复它:
StringBuffer sb = new StringBuffer();
for(byte b : hash) {
sb.append(String.format("%02x", b));
}
谢谢!
【问题讨论】: