6 ответов:
Используйте регулярное выражение следующим образом:
public static bool IsMD5(string input) { if (String.IsNullOrEmpty(input)) { return false; } return Regex.IsMatch(input, "^[0-9a-fA-F]{32}$", RegexOptions.Compiled); }
Ну, хэш MD5 на самом деле просто двоичные данные - если у вас есть строка, то она предположительно закодирована каким-то образом, например base64 или hex. Вы можете проверить, правильно ли закодирована строка для правильной длины двоичного файла (16 байт). Это все, хотя-в то время как там могут быть двоичные значения, которые никогда не являются результатом хэширования каких-либо данных, я сильно сомневаюсь, что вы можете распознать такие значения. В идеале, конечно, таких ценностей не должно быть...
Хэш MD5 - это 128-битное значение. Обычно он представлен в виде
byte[]длиной 16 или в видеstring, где каждый байт представлен двумя шестнадцатеричными цифрами. Хэш MD5 не имеет внутренней структуры или какой-либо "подписи", которая позволяет определить, является ли 128-битное значение хэшем MD5 или нет.
Первое, что нужно сделать, это изучить файл, чтобы выяснить, как кодируются хэши MD5,а затем разработать соответствие на основе этого.
Я думаю, что правильный - это тот, который включает также заглавные буквы иногда хэши приходят также в заглавных буквах, так почему бы не пропустить это.
[0-9a-fA-F]{32}Или
[0-9a-f]{32}(?i)
Comments