有没有办法测试字符串是否是MD5哈希?

The*_*esa 9 c# md5

我正在尝试将包含MD5哈希值和关键字(每行一个)的文本文件输入到C#应用程序中.有没有办法检查字符串是否是MD5哈希?我查看了MSDN,在MD5类中找不到任何内容.

THX*_*138 18

像这样使用正则表达式:

public static bool IsMD5(string input)
{
    if (String.IsNullOrEmpty(input))
    {
        return false;
    }

    return Regex.IsMatch(input, "^[0-9a-fA-F]{32}$", RegexOptions.Compiled);
}
Run Code Online (Sandbox Code Playgroud)

  • 这个94476226E1DD479C8E1FAB7A8FDEFFFA不起作用,核心正则表达式是`[0-9a-fA-F] {32}` (6认同)
  • 实际上,正则表达式应该是'^ [0-9A-F] {32} $`(不区分大小写`/ i`标志)或`^ [0-9A-FA-F] {32} $`作为@ EduardFlorinescu建议你是否不能设置不区分大小写的标志.因为`[0-9a-f] {32}`也匹配更长的字符串,这可能会发生,但不会是某个东西的MD5,而只是任何随机的十六进制编码数据. (2认同)

Jon*_*eet 9

好吧,MD5哈希实际上只是二进制数据 - 如果你有一个字符串,那么它可能以某种方式编码,例如base64或hex.您可以测试字符串是否正确编码为正确长度的二进制(16字节).尽管如此 - 尽管可能存在二进制值,这些值永远不会是散列任何数据的结果,但我非常怀疑您是否可以识别这些值.理想情况下,当然不应该有这样的价值观......


dtb*_*dtb 5

MD5哈希值是128位值.它通常表示为byte[]长度为16,或者string表示每个字节由两个十六进制数字表示.MD5哈希没有内部结构或任何类型的"签名",允许您检测128位值是否为MD5哈希值.