如何使用哈希进行密码检查?

Bic*_*eng 1 python hash

我正在通过Miguel Grinberg的出色教程来学习Flask 。在该章中,出于安全原因,他建议存储用户的密码哈希而不是密码本身。被使用的功能generate_password_hashcheck_password_hash。但是,即使您generate_password_hash使用相同的字符串进行调用,也可以获得不同的哈希值:

在此处输入图片说明

那么,check_password_hash如果相同的字符串可以具有尽可能多的哈希值,该如何工作?

Sam*_*Sam 5

密码使用盐进行哈希处理,盐是字母和数字的伪随机字符串。每次跑步,盐分都会不同generate_password_hash()。因此,产生的哈希也将有所不同。

这样做是为了使黑客无法简单地猜测常用密码的哈希值。例如,“ pass1234”本身的哈希值每次都会相同。但是,“ pass1234 + salt”的哈希值每次都不同。您的数据库应存储哈希值和盐值(重要的不是明文密码)。如果泄漏有关用户帐户的信息,这可以最大程度地减少损坏。

对于Flask和werkzeug,返回值generate_password_hash()的格式为:(method$salt$hash您可以$在提供的屏幕截图中看到两个符号)。因此,下次您针对哈希检查纯文本密码时,将其与盐值从一起使用,generate_password_hash()并查看其是否与哈希值匹配。