22

我不想计算文件的校验和,只是想知道给定的字符串是否是有效的校验和

4

5 回答 5

56

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}$");
}
于 2009-12-13T14:55:07.277 回答
14

任何 160 位序列都是可能的 SHA1 哈希。任何 128 位序列都是可能的 MD5 散列。

如果您正在查看它们的十六进制字符串表示形式,那么 sha1 看起来像 40 个十六进制数字,而 md5 看起来像 32 个十六进制数字。

于 2009-12-13T14:47:20.280 回答
1

没有像 MD5 或 SHA-1 字符串这样的东西,至少没有标准化的字符串。您可以测试的只是字节数组的大小:MD5 为 16(输出大小为 128 位的散列)或 SHA-1(输出大小为 160 位的散列)为 20 个字节,使用十六进制编码或base 64 编码。

如果您使用md5sum,则校验和通常显示为十六进制编码,使用小写字符(后跟文件名或-用于标准输入)。通常首选十六进制,但哈希也可能包含分隔符或使用不同的编码,例如 base 64 或 base 64 URL(等等)。

但是,您正在测试的字节大小可能属于完全不同的散列,例如RIPEMD,它也可能具有相同的输出大小。或者它可能是具有相同字节数的另一个值。

于 2019-12-05T21:58:39.220 回答
-1

MD5 验证器:

public boolean isValidMD5(String s) {
return s.matches("[a-fA-F0-9]{32}");}

并删除字符串值的“-”。

于 2015-02-28T12:02:39.303 回答
-1

正则表达式 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...");
于 2018-09-06T01:35:00.583 回答