Проверка строки типа ha sh - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь написать код, который проверяет, если заданная строка имеет значение ha sh, в одном из следующих типов: md4, sha1, sha256. Мои функции сейчас выглядят так:

def hash_is_md5(_hash) -> bool:
    search = re.compile(r"([a-fA-F\d]{32})").search
    return not bool(search(_hash) )

def hash_is_sha1(_hash) -> bool:
    if len(_hash) != 40:
        return False
    try:
        hash_int = int(_hash, 16)
    except ValueError:
        return False
    return True

def hash_is_sha256(_hash) -> bool:
    if (len(_hash.encode("utf-8")) / 8) == 32:
        return True
    else:
        return False

Но они не работают должным образом. Есть идеи, что я неправильно закодировал?

1 Ответ

0 голосов
/ 07 апреля 2020

Вывод sha256 - это ха sh с 64 символами. Деление его на 8 на самом деле будет равно 8. Но вам даже не нужно выражение if, вы можете просто проверить длину га sh и вернуть это сравнение. Таким образом, функция SHA256 может быть

def hash_is_sha256(_hash) -> bool:
    return len(_hash) == 64

Длина для sha1 равна 40, а для md5 длина равна 32, поэтому их функции выглядят как ...

def hash_is_sha1(_hash) -> bool:
    return len(_hash) == 40


def hash_is_md5(_hash) -> bool:
    return len(_hash) == 32

Все это Предполагается, что вы берете шестнадцатеричный га sh, который является выходом каждого алгоритма. Если это предположение неверно, дайте мне знать, и я могу обновить это.

...