【问题标题】:md5 equivalent in javascript [duplicate]javascript中的md5等效项[重复]
【发布时间】:2013-02-01 05:48:01
【问题描述】:

可能重复:
How to calculate md5 hash of a file using javascript
Can I convert password to md5 in javascript before sending to php page?

是否有任何函数或方法可以使用 JavaScript 作为 php 中的哈希来加密字符串?我要求用户在那里设置密码,我不希望在 php 对其应用散列之前,密码以字符串格式出现在服务器上。

【问题讨论】:

  • 请注意,MD5 不是 加密。它是散列
  • @Jack,该链接与此问题无关。
  • md5 不是加密,而是哈希算法
  • @Brad 我不会说什么,但我同意你的观点,它需要一个不同的答案:)

标签: php javascript hash md5


【解决方案1】:

md5 是一种散列方法,而不是一种加密方法。它是一种可以用任何语言实现的通用算法,所以我确信那里存在 JavaScript 版本。

但是,您的逻辑有缺陷。为什么要在客户端对密码进行哈希处理?然后可以在发送到服务器的途中捕获经过哈希处理的密码,这比服务器单独对其进行哈希处理更糟糕。这不提供任何保护。

在相关说明中,md5 是一个非常不安全的哈希。使用bcrypt


散列与加密的区别在于,前者创建摘要,而后者创建可解密的加密内容。哈希摘要无法转换回原始数据,因为它(故意)丢失了。哈希用于身份验证,加密用于保密。


为了扩展客户端散列至多与服务器端散列一样有效的事实,请考虑将散列摘要与存储在数据库。

您存储的值是原始密码的md5。要进行身份验证,您必须接收密码,使用md5,然后将其与数据库中的摘要进行比较。这意味着必须最多调用一次md5。如果你想在JS中调用它,那么它不会在php中调用。这意味着如果有人截获了md5,它就像截获原始密码一样有效,因为他们只需将md5 发布到您的服务器,而无需进行额外的哈希处理。

如果您在服务器端进行了md5 哈希,那不会有任何区别,因为会收到相同的未哈希值(相对于 PHP 操作)。事实上,它不太安全,因为重复相同的哈希会增加冲突的可能性。

【讨论】:

  • 那么保护它的最佳方法是什么?
  • Salt it 和 hash it 服务器端。如果您真的很担心,请使用SSL
  • @RahulJha 使用https 进行所有客户端/服务器通信。在服务器端使用强大的散列算法,例如bcrypt,以防止它在那里受到损害。只要您使用httpsPOST 发送密码,您就可以做到。毕竟,您无法阻止恶意的人站在对方身后看着他们输入密码。我更担心会话固定、会话劫持或 CSRF,而不是密码泄露
  • 感谢您的信息:)
【解决方案2】:

对此唯一正确的答案是:不要使用 md5 加密密码

如果您担心通过未加密连接传输纯文本密码,请使用加密连接

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 2012-07-06
    • 2018-12-19
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多