跳到内容

hashlib-不安全-哈希函数 (S324)

源自 flake8-bandit linter。

作用

检查 hashlibcrypt 库中弱或已破解的密码哈希函数的使用情况。

为什么这不好?

弱或已破解的密码哈希函数可能容易受到碰撞攻击(其中两个不同的输入产生相同的哈希)或原像攻击(其中攻击者可以找到产生给定哈希的输入)。这可能会导致依赖这些哈希函数的应用程序出现安全漏洞。

避免在安全上下文中使用弱或已破解的密码哈希函数。 而是使用已知的安全哈希函数,例如 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

参考