.net MD5如何处理我的密码字符串?

.net MD5如何处理我的密码字符串?,.net,md5,.net,Md5,我设置了密码“13579”,身份验证模式表单将其转换为MD5,如“mEXg8klnq0TwPFvAqytULA==”但几分钟后,我再次尝试使用相同的密码“13579”创建另一个密码,但它会转换为不同的密码,如“uM4gH8HO8cvoE0slg6OyKA==” MD5的结构是什么?它与我的用户名和时间有关吗?我想为我的用户创建相同的密码,因此如果取决于时间,我就无法创建相同的密码。最终形式不是MD5而是BASE-64,MD5哈希如下所示:9e107d9d372bb6826bd81d3542a41

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

最终形式不是MD5而是BASE-64,MD5哈希如下所示:9e107d9d372bb6826bd81d3542a419d6

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


很可能是某种类型的salt值发生了变化,如果您不确定salt值是什么,请参阅。

MD5的结果是一致的,但您可能会发现用户名也在使用,因此差异是因为用户名不同。(时间不会有用,因为您无法将哈希密码与任何内容进行匹配)。

您可以在字符串末尾看到这些==符号。。这是Base64转换的字符串。并且=号用于填充

至于你得到的绳子它是不同的,因为ASP.Net成员资格提供程序为每个不同的用户分配不同的salt,所以即使用户名相同,您也会得到不同的哈希值


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

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


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

您的密码由ASP.NET成员资格提供商进行salt处理。查看您的数据库,Users表中将有一列包含salt。提供者为每个用户生成salt并将其存储在表中。然后使用该salt对密码进行加密。由于每个用户具有不同的salt值,因此加密时,相同的明文密码将不同


您可能希望不使用salt就使用该提供程序-尝试在Google上搜索“ASP.NET成员资格提供程序no salt”,但您可能最终会对自己的提供程序进行子类化。我认为web.config中的“提供者设置”中没有关闭盐析功能的选项。

我将告诉您它不起什么作用:安全地存储它。这不完全正确。碰撞攻击可能是数字签名和完整性验证的问题,更不用说密码了(提示:尝试通过验证密码字段获取碰撞数据)。虽然有更好的替代方案(如河豚鱼)存在,但使用MD5散列的精心选择的盐腌密码可以被认为是相当安全的。