MD5是用来处理密码字符串的吗?

7
我设置了密码“13579”,认证模式表单将其转换为MD5,如“mEXg8klnq0TwPFvAqytULA==”,但几分钟后我再次尝试使用相同的密码“13579”创建另一个密码,但它转换为不同的密码,如“uM4gH8HO8cvoE0slg6OyKA==”。MD5的结构是什么?它是否与我的用户名和时间有关?我想为我的用户创建相同的密码,因此如果它取决于时间,则无法创建相同的密码。

我告诉你它不会做什么:安全地存储它。 - Grant Thomas
这并不完全正确。碰撞攻击可能会对数字签名和完整性验证构成问题,但对密码来说就没那么严重了(提示:尝试通过经过验证的密码字段获取碰撞数据)。使用MD5哈希处理的精心选择并加盐的密码可以被认为是相当安全的,虽然存在更好的替代方案(例如Blowfish)。 - Falcon
5个回答

9
您的密码由ASP.NET Membership提供程序加盐 - 查看您的数据库,将会有一个包含盐的列在用户表中。该提供程序为每个用户生成并存储盐值。然后使用此盐值来加密密码。由于每个用户具有不同的盐值,因此相同的明文密码在加密时将会不同。
您可能希望使用未加盐的提供程序 - 尝试搜索“ASP.NET Membership Provider no salt”,但您可能最终需要子类化自己的提供程序。我认为在web.config的提供程序设置中没有关闭加盐选项。

6

MD5是一种确定性算法,因此您可能会遇到“加盐哈希”。这意味着,某些字符串或其他数据(例如时间戳)被编码为“盐”添加到密码中以加强它。

在数据库中查找名为salt的列,或者检查附加有创建日期时间戳的密码的md5结果,以查找盐。


4
那个最终形式不是MD5,而是BASE-64,一个MD5哈希值看起来像这样:9e107d9d372bb6826bd81d3542a419d6。
给定相同的输入参数,MD5确实应该生成相同的哈希值,然而没有具体的实现细节,很难说会导致你看到的差异。
最可能的是某种变化的盐值,如果您不确定盐值是什么,请参见此处

2

你看到字符串末尾的这些 == 符号吗?那是用于 Base64 转换的字符串。而等号符号则用于填充。

至于你获得的字符串。 它不同,因为 ASP.Net 成员资格提供程序为每个不同的用户分配了一个不同的盐值,所以即使用户名相同,你也会得到不同的哈希值。

但是,如果你已经为两个用户设置了相同的密码,你可以使用相同的密码登录.. 因为在内部,盐和相同的密码的混合物总是匹配它们各自的哈希值。


0

MD5的结果是一致的,但你可能会发现用户名也在使用中,所以差异是因为不同的用户名。(时间不会有用,因为你无法将哈希密码与任何东西匹配)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接