我设置了密码“13579”并且身份验证模式将其转换为MD5,如“mEXg8klnq0TwPFvAqytULA ==”,但经过几分钟我再次尝试并使用相同的密码“13579”创建另一个密码,但它转换为不同的密码比如“uM4gH8HO8cvoE0slg6OyKA ==” MD5的结构是什么?它与我的用户名和时间有关吗?我想为我的用户创建相同的密码,因此如果它取决于时间我就无法创建相同的密码。
答案 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的结果是一致的,但您可能会发现用户名也在使用,因此不同之处在于不同的用户名。 (时间没有用,因为你无法将哈希密码与任何东西相匹配)。