可能重复:
如何使用 javascript 计算文件的 md5 哈希值
我可以在发送到 php 页面之前将密码转换为 javascript 中的 md5 吗?
是否有任何函数或方法可以使用 JavaScript 作为 php 中的哈希来加密字符串?我要求用户在那里设置密码,我不希望在 php 对其应用散列之前,密码以字符串格式出现在服务器上。
可能重复:
如何使用 javascript 计算文件的 md5 哈希值
我可以在发送到 php 页面之前将密码转换为 javascript 中的 md5 吗?
是否有任何函数或方法可以使用 JavaScript 作为 php 中的哈希来加密字符串?我要求用户在那里设置密码,我不希望在 php 对其应用散列之前,密码以字符串格式出现在服务器上。
md5
是一种散列方法,而不是一种加密方法。这是一种可以用任何语言实现的通用算法,所以我确信那里存在 JavaScript 版本。
但是,您的逻辑是有缺陷的。为什么要在客户端对密码进行哈希处理?然后可以在发送到服务器的途中捕获经过哈希处理的密码,这比服务器单独对其进行哈希处理更糟糕。这不提供任何保护。
在相关说明中,md5
是一个非常不安全的哈希。使用bcrypt
.
散列与加密之间的区别在于,前者创建摘要,而后者创建可以解密的加密内容。哈希摘要无法转换回原始数据,因为它(故意)丢失了。散列用于身份验证,加密用于保密。
扩展客户端哈希是最多与服务器端散列一样有效的事实,请考虑在将散列摘要与存储在数据库中的值进行比较时完成身份验证的事实。
您存储的值是md5
原始密码的值。要进行身份验证,您必须接收密码,使用md5
,然后将其与数据库中的摘要进行比较。这意味着md5
最多只能调用一次。如果你想在JS中调用它,那么它不会在php中调用。这意味着如果有人拦截了md5
它,就好像他们拦截了原始密码一样有效,因为他们可以发布md5
到您的服务器,而无需进行额外的哈希处理。
如果您还在服务器端进行了md5
散列,那不会有任何区别,因为会收到相同的未散列值(相对于 PHP 操作)。事实上,它不太安全,因为重复相同的哈希会增加冲突的可能性。
唯一正确的答案是:不要使用 md5 加密密码
如果您担心通过未加密的连接传输纯文本密码,请使用加密连接。