MD5对我的密码字符串做了什么?

时间:2011-02-14 13:48:19

标签: .net md5

我设置了密码“13579”并且身份验证模式将其转换为MD5,如“mEXg8klnq0TwPFvAqytULA ==”,但经过几分钟我再次尝试并使用相同的密码“13579”创建另一个密码,但它转换为不同的密码比如“uM4gH8HO8cvoE0slg6OyKA ==” MD5的结构是什么?它与我的用户名和时间有关吗?我想为我的用户创建相同的密码,因此如果它取决于时间我就无法创建相同的密码。

5 个答案:

答案 0 :(得分:9)

您的密码由ASP.NET成员资格提供程序提供支持 - 查看您的数据库,Users表中将包含一个包含salt的列。 Provider为每个用户生成salt并将其存储在表中。然后使用此salt加密密码。由于每个用户具有不同的盐值,因此加密时明文中的相同密码将不同。

您可能希望在没有salting的情况下使用提供程序 - 尝试使用Google搜索“ASP.NET成员资格提供程序无盐”,但您最终可能会继承自己的提供程序。我不认为web.config中的提供程序设置有一个选项可以关闭盐析。

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

最终形式不是MD5,而是BASE-64,MD5哈希看起来像这样:9e107d9d372bb6826bd81d3542a419d6

MD5确实应该在给定相同输入参数的情况下生成相同的哈希,但是如果没有具体的实现细节,很难说会导致您看到的差异。

如果您不确定盐值是多少,那么很可能某种盐值发生变化,请参阅here

答案 3 :(得分:2)

你会在字符串的末尾看到那些==符号。对于Base64转换的字符串.and = sign用于填充。

至于你得到的字符串。 不同,因为ASP.Net会员提供商为每个不同的用户分配不同的盐,因此即使用户名相同,您也会获得不同的哈希值。

但是无论如何,如果您为两个用户设置了相同的密码,您可以使用相同的密码登录...因为内部盐和相同密码的混合始终匹配到各自的哈希值。

答案 4 :(得分:0)

MD5的结果是一致的,但您可能会发现用户名也在使用,因此不同之处在于不同的用户名。 (时间没有用,因为你无法将哈希密码与任何东西相匹配)。