如何检查字符串是否是有效的md5或sha1校验和字符串

时间:2009-12-13 14:45:55

标签: java md5 sha1 checksum

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

5 个答案:

答案 0 :(得分:44)

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}$");
}

答案 1 :(得分:10)

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

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

答案 2 :(得分:0)

MD5验证者:

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

删除字符串值的“ - ”。

答案 3 :(得分:0)

RegExp 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...");

答案 4 :(得分:0)

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

如果使用md5sum,则校验和通常显示为十六进制编码,仅使用 小写字符(后跟文件名或-作为标准输入)。通常最好使用十六进制,但是散列也可以包含分隔符或使用其他编码,例如base 64或base 64 URL(等)。

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