代码之家  ›  专栏  ›  技术社区  ›  robert

如何知道“usedforsecurity”标志是否受支持hashlib.md5?

  •  0
  • robert  · 技术社区  · 7 年前

    >>> import hashlib
    >>> hashlib.md5(usedforsecurity=False)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: openssl_md5() takes no keyword arguments
    

    但是当我在我的Linux机器上运行它时,它就工作了!

    >>> import hashlib
    >>> hashlib.md5(usedforsecurity=False)
    <md5 HASH object @ 0x7f763c1375d0>
    

    我的问题是,我需要在支持FIPS的系统上运行一些安全的、与安全无关的代码(例如管理用户请求的缓存,它将用户查询散列为MD5字符串)。使用 usedforsecurity 标志可防止FIPs异常。

    用于安全性 旗子。有没有一个好的方法来检测底层的C绑定是否在后面 hashlib.md5

    1 回复  |  直到 7 年前
        1
  •  0
  •   anthony sottile    6 年前

    我也遇到了同样的问题哈希库.md5(),但我可以这样做来检查:

    >>> import hashlib, inspect
    >>> inspect.getargspec(hashlib.new)
    ArgSpec(args=['name', 'string', 'usedforsecurity'], varargs=None, keywords=None, defaults=('', True))
    

    在Python 3+上, getargspec 已弃用,所以 getfullargspec usedforsecurity kwonlyargs 现在就去。

    >>> inspect.getfullargspec(hashlib.new)
    FullArgSpec(args=['name', 'data'], varargs=None, varkw='kwargs', defaults=(b'',), kwonlyargs=['usedforsecurity'], kwonlydefaults={'usedforsecurity': True}, annotations={})
    
        2
  •  0
  •   robert    7 年前

    >>> import inspect
    >>> inspect.getargspec(hashlib.md5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib64/python2.7/inspect.py", line 815, in getargspec
        raise TypeError('{!r} is not a Python function'.format(func))
    TypeError: <built-in function openssl_md5> is not a Python function
    

    以下是我可以使用try/except得到的最佳结果:

    >>> import hashlib
    >>> has_usedforsecurity_flag = False
    >>> try:
    ...   hashlib.md5(usedforsecurity=False)
    ...   has_usedforsecurity_flag = True
    ... except Exception as e:
    ...   print e
    ...   # Doesn't have the flag.
    ...
    <md5 HASH object @ 0x7f763c0b9bc0>