我正在尝试编写验证给定字符串是否为以下类型之一的哈希的代码: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
但是它们无法正常工作。任何想法我编码错了吗?
sha256的输出是具有64个字符的哈希。将其除以8实际上等于8。但是您甚至不需要if语句,您只需检查哈希的长度并返回该比较即可。因此,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
所有这些都假设您正在采用十六进制哈希值,该哈希值是每种算法的输出。如果这个假设是错误的,请告诉我,我可以进行更新。