hashlib-不安全-哈希函数 (S324)
源自 flake8-bandit linter。
作用
检查 hashlib
和 crypt
库中弱或已破解的密码哈希函数的使用情况。
为什么这不好?
弱或已破解的密码哈希函数可能容易受到碰撞攻击(其中两个不同的输入产生相同的哈希)或原像攻击(其中攻击者可以找到产生给定哈希的输入)。这可能会导致依赖这些哈希函数的应用程序出现安全漏洞。
避免在安全上下文中使用弱或已破解的密码哈希函数。 而是使用已知的安全哈希函数,例如 SHA256。
示例
import hashlib
def certificate_is_valid(certificate: bytes, known_hash: str) -> bool:
hash = hashlib.md5(certificate).hexdigest()
return hash == known_hash
建议改为
import hashlib
def certificate_is_valid(certificate: bytes, known_hash: str) -> bool:
hash = hashlib.sha256(certificate).hexdigest()
return hash == known_hash
或者,如果哈希算法未在安全上下文中使用,例如作为非密码单向压缩函数,则添加 usedforsecurity=False
import hashlib
def certificate_is_valid(certificate: bytes, known_hash: str) -> bool:
hash = hashlib.md5(certificate, usedforsecurity=False).hexdigest()
return hash == known_hash