【发布时间】:2010-12-26 04:27:34
【问题描述】:
我不想计算文件的校验和,只是想知道给定的字符串是否是有效的校验和
【问题讨论】:
我不想计算文件的校验和,只是想知道给定的字符串是否是有效的校验和
【问题讨论】:
任何 160 位序列都是可能的 SHA1 哈希。任何 128 位序列都是可能的 MD5 哈希。
如果您正在查看它们的十六进制字符串表示,那么 sha1 看起来像 40 个十六进制数字,而 md5 看起来像 32 个十六进制数字。
【讨论】:
SHA1 验证者:
public boolean isValidSHA1(String s) {
return s.matches("^[a-fA-F0-9]{40}$");
}
MD5 验证器:
public boolean isValidMD5(String s) {
return s.matches("^[a-fA-F0-9]{32}$");
}
【讨论】:
^[a-fA-F0-9]{40}$
MD5 验证器:
public boolean isValidMD5(String s) {
return s.matches("[a-fA-F0-9]{32}");}
并去掉字符串值的“-”。
【讨论】:
正则表达式 SHA-1
public static final String SHA_1 = "^([0-9A-Fa-f]{2}[:]){19}([0-9A-Fa-f]{2})$";
public boolean isValidSHA1(String s) {
return s.matches(SHA_1);
}
boolean isValidSHA1 = isValidSHA1("12:45:54:3A:99:24:52:EA...");
【讨论】:
没有像 MD5 或 SHA-1 字符串这样的东西,至少没有标准化的字符串。您可以测试的只是字节数组的大小:MD5 为 16(输出大小为 128 位的散列)或 SHA-1(输出大小为 160 位的散列)为 20 个字节,使用十六进制编码或base 64 编码。
如果您使用md5sum,则校验和通常显示为十六进制编码,仅使用 小写字符(后跟文件名或- 用于标准输入)。通常首选十六进制,但哈希也可能包含分隔符或使用不同的编码,例如 base 64 或 base 64 URL(等等)。
但是,您正在测试的字节大小可能属于完全不同的哈希值,例如 RIPEMD,它也可能具有相同的输出大小。或者它可能是具有相同字节数的另一个值。
【讨论】: