How do I check if a string is a valid md5 or sha1 checksum string

前端 未结 5 492
陌清茗
陌清茗 2020-12-30 00:10

I don\'t want to calculate a file\'s checksum, just to know if a given string is a valid checksum

相关标签:
5条回答
  • 2020-12-30 00:48

    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...");
    
    0 讨论(0)
  • 2020-12-30 00:49

    Any 160-bit sequence is a possible SHA1 hash. Any 128-bit sequence is a possible MD5 hash.

    If you're looking at the hex string representations of them, then a sha1 will look like 40 hexadecimal digits, and an md5 will look like 32 hexadecimal digits.

    0 讨论(0)
  • 2020-12-30 00:52

    There is no such thing as an MD5 or SHA-1 string, at least not one that is standardized. All you can test for is the size of the byte array: 16 for MD5 (a hash with an output size of 128 bits) or 20 bytes for SHA-1 (a hash with an output size of 160 bits) encoded using hexadecimal encoding or base 64 encoding.

    If you use md5sum then generally the checksum is shown as hexadecimal encoding, using only lowercase characters (followed by the file name or - for standard input). Hexadecimals are generally preferred, but hashes may also contain separator character or use a different encoding such as base 64 or base 64 URL (etc. etc.).

    The byte size you are testing for might however belong to an entirely different hash such as RIPEMD that may also have the same output size. Or it may be another value with the same amount of bytes.

    0 讨论(0)
  • 2020-12-30 01:09

    SHA1 verifier:

    public boolean isValidSHA1(String s) {
        return s.matches("^[a-fA-F0-9]{40}$");
    }
    

    MD5 verifier:

    public boolean isValidMD5(String s) {
        return s.matches("^[a-fA-F0-9]{32}$");
    }
    
    0 讨论(0)
  • 2020-12-30 01:10

    MD5 verifier:

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

    And remove "-" of the string value.

    0 讨论(0)
提交回复
热议问题