【问题标题】:Checking string hash type检查字符串哈希类型
【发布时间】:2020-07-19 19:20:12
【问题描述】:

我正在尝试编写代码来验证给定的字符串是否是以下类型之一的哈希: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

但它们不能正常工作。有什么我编码错误的想法吗?

【问题讨论】:

  • “但它们不能正常工作。” 不是问题陈述。请准确说明什么是有效的,什么是无效的;您所看到的以及它与您的预期有何不同。
  • 此外,MD5、SHA-1 和 SHA-256 哈希之间的唯一区别是十六进制字符串的长度。而已;所有其他信息都消失了。那么,为什么您对每种方法都使用完全不同的方法呢?

标签: python hash md5 sha1 sha256


【解决方案1】:

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

所有这些都假设您使用的是每个算法的输出的十六进制哈希。如果这个假设是错误的,请告诉我,我可以更新它。

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多