【问题标题】:How to use MD5 in javascript to transmit a password如何在javascript中使用MD5传输密码
【发布时间】:2010-12-30 01:22:13
【问题描述】:

我弹出一个 jquery 对话框模式框,用于登录我的网站。当用户点击登录时,它会向 login.php 文件发出 post 请求,如下所示:

$.post(
      'includes/login.php', 
      { user: username, pass: password },
      onLogin, 
      'json' );

在将密码放入发布请求之前,我如何对该密码执行 md5 操作?另外,我使用 MD5() 将用户的密码存储在 MySQL 数据库中,所以我想将存储的密码版本与提交的密码的 MD5 进行比较。感谢所有回复的人。

【问题讨论】:

  • 更好地使用 SSL 来保护您的连接。
  • 同意秋葵。然后在服务器端使用 SHA256
  • 我确实启用了 SSL,但我希望在加密的 http 标头中加密密码。
  • @Silmaril89,MD5 不加密,不建议用于存储密码。
  • 不仅最好使用 SSL 来保护连接,在发送之前对密码进行哈希处理完全没用as explained by jt in his answer。这个问题被赞成是不好的,因为它误导人们认为这实际上是安全的。

标签: javascript jquery post passwords md5


【解决方案1】:

crypto-js 是一个丰富的 javascript 库,包含许多加密算法。

您只需拨打CryptoJS.MD5(password)

$.post(
  'includes/login.php', 
  { user: username, pass: CryptoJS.MD5(password) },
  onLogin, 
  'json' );

【讨论】:

  • 此插件由于某种原因不再可用。这里有一个版本:richardpeacock.com/dev/files/jquery.md5.js.txt
  • 你应该使用更标准的code.google.com/p/crypto-jscrypto-js 并包含你需要的加密的JS。
  • 鉴于链接的插件现在似乎不可用,我认为这个答案需要一些关爱和关注。
  • 这不再托管在该 CDN 上。在意识到这一点之前,我花了一个小时想知道发生了什么。最终从here 获取 zip,然后使用汇总中的 sha1.js(自给自足)
【解决方案2】:

如果有人在嗅探您的纯文本 HTTP 流量(或缓存/cookie)以获取密码,那么将密码转换为哈希将无济于事 - 哈希密码可以像纯文本一样“重播”。客户端需要用一些随机的东西(比如日期和时间)对密码进行哈希处理 请参阅此处的“AUTH CRAM-MD5”部分: http://www.fehcom.de/qmail/smtpauth.html

【讨论】:

  • 如果使用 SSL 是安全的,问题并没有说它不是。
  • @malthe 基本身份验证使用 SSL 是安全的
  • @Motes,可以说问题的关键是永远看不到纯文本密码,因此在客户端使用(可能是加盐的)md5。如果使用 SSL,那么仅通过嗅探流量就不可能进行重放攻击。
  • @malthe 每个授权唯一的服务器随机数和客户端随机数同样可以阻止嗅探,例如摘要身份验证。
  • @malthe,当然使用 SSL 基本身份验证不会以纯文本形式传输密码,它们由 SSL 证书加密,但如果您的意思是服务器不应该将密码存储为纯文本这可能是真的,但是唯一真正的安全性提高可能来自在某处拥有私钥。服务器应该使用从不存储的服务器启动密码来加密密码,因为使用带有持久盐或随机数的 MD5 存储它们仍然会使服务器容易受到冲突攻击。为了真正的安全,某些地方需要被信任以不为敌人所知。
【解决方案3】:

我建议你在这种情况下使用 CryptoJS。

基本上,CryptoJS 是使用最佳实践和模式在 JavaScript 中实现的标准和安全加密算法的不断增长的集合。它们速度快,界面一致且简单。

所以如果你想计算密码字符串的哈希值(MD5),那么请执行以下操作:

<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/md5.js"></script>
<script>
    var passhash = CryptoJS.MD5(password).toString();

    $.post(
      'includes/login.php', 
      { user: username, pass: passhash },
      onLogin, 
      'json' );
</script>

因此,此脚本会将您的密码字符串的哈希值发布到服务器。

有关其他哈希计算算法的更多信息和支持,您可以访问:

http://code.google.com/p/crypto-js/

【讨论】:

  • 感谢您的回答...对于那些正在寻找 JavaScript 和 c#/VB.NET 之间的加密/解密的人推荐的是这个答案,您可能还想看看这个msdn.microsoft.com/en-us/library/…对于 c#
【解决方案4】:

您可能想查看此页面:http://pajhome.org.uk/crypt/md5/

但是,如果保护密码很重要,那么您确实应该使用 SHA256 之类的东西(MD5 不是加密安全的 iirc)。更重要的是,您可能需要考虑使用 TLS 并获取证书,以便可以使用 https。

【讨论】:

  • 感谢您的回复,我的网站使用的是https,但是由于某种原因apache在传输页面时使用了加密,但是页面加载后仍然使用https,但是页面没有加密.你认为它在提交时仍然会加密登录信息吗?
  • 我不是专家,但您可以尝试在测试机器上嗅探数据包,看看它是否已加密。
【解决方案5】:

响应 jt.你是对的,只有密码的 HTML 很容易受到中间人攻击。但是,您可以使用来自服务器的 GUID 为其播种...

$.post(
  'includes/login.php', 
  { user: username, pass: $.md5(password + GUID) },
   onLogin, 
  'json' );

这将击败中间人......因为服务器将为每次尝试生成一个新的 GUID。

【讨论】:

【解决方案6】:

如果您使用的是 php jquery,这可能会有所帮助:

   $.ajax({
        url:'phpmd5file.php',
        data:{'mypassword',mypassword},
        dataType:"json",
        method:"POST",
        success:function(mymd5password){
            alert(mymd5password);
        }
    });

在您的 phpmd5.php 文件中:

echo json_encode($_POST["mypassword"]);

不需要 jsplugins。只需使用 ajax 并让 php md5() 完成这项工作。

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 2012-11-20
    • 2023-03-30
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2011-08-09
    • 2019-10-10
    相关资源
    最近更新 更多