【发布时间】:2009-11-11 14:17:56
【问题描述】:
我正在尝试将包含 MD5 哈希和关键字(每行一个)的文本文件输入到 C# 应用程序中。有没有办法检查字符串是否是 MD5 哈希?我在 MSDN 上查看,在 MD5 类中找不到任何内容。
【问题讨论】:
-
您可以发布文件内容的示例吗?数据有什么规律吗?
-
不幸的是,我不能。我没有用于测试我的应用的真实文件。
我正在尝试将包含 MD5 哈希和关键字(每行一个)的文本文件输入到 C# 应用程序中。有没有办法检查字符串是否是 MD5 哈希?我在 MSDN 上查看,在 MD5 类中找不到任何内容。
【问题讨论】:
像这样使用正则表达式:
public static bool IsMD5(string input)
{
if (String.IsNullOrEmpty(input))
{
return false;
}
return Regex.IsMatch(input, "^[0-9a-fA-F]{32}$", RegexOptions.Compiled);
}
【讨论】:
[0-9a-fA-F]{32}
^[0-9a-f]{32}$(带有不区分大小写的/i 标志)或@EduardFlorinescu 建议的^[0-9a-fA-F]{32}$。因为[0-9a-f]{32} 也匹配更长的字符串,这可能会发生,但这不会是某个东西的 MD5,而只是任何随机的十六进制编码数据。
嗯,MD5 哈希实际上只是二进制数据——如果你有一个字符串,那么它可能是以某种方式编码的,例如base64 或十六进制。您可以测试字符串是否正确编码为正确长度的二进制(16 个字节)。仅此而已 - 虽然 可能 存在永远不是散列任何数据的结果的二进制值,但我非常怀疑您能否识别这些值。理想情况下,当然不应该有这样的值......
【讨论】:
MD5 哈希是一个 128 位的值。它通常表示为长度为 16 的byte[],或表示为string,其中每个字节由两个十六进制数字表示。 MD5 哈希没有内部结构或任何类型的“签名”,可让您检测 128 位值是否为 MD5 哈希。
【讨论】:
如果它的 32 字节长和 0-9 a-f 它可能是 md5,但不是 100%
【讨论】:
首先要做的是检查文件以找出 MD5 哈希是如何编码的,然后根据它设计匹配。
【讨论】:
我认为正确的是这个,它还包括大写字母,有时哈希也出现在大写字母中,所以为什么会错过。
[0-9a-fA-F]{32}
或
[0-9a-f]{32}(?i)
【讨论】: