【问题标题】:Encrypting & Decrypting MD5 in MySQL在 MySQL 中加密和解密 MD5
【发布时间】:2012-06-13 08:12:34
【问题描述】:

我可以使用下面的代码插入一行。

USE pmdb;
INSERT INTO md5_tbl (md5_val, username, password) VALUES(MD5('abcdef'), 'usna', MD5('Aa123456'));

当我使用用户名字段选择行时如何解密或解码密码?

【问题讨论】:

  • 除了其他人所说的(MD5是散列而不是加密):MD5 is Broken.

标签: c# mysql md5


【解决方案1】:

首先,MD5 是一种散列算法 = 无法解密(暴力破解除外,但是...)

其次,不要使用 MD5 来散列密码,它根本不安全。相反,请至少使用 SHA 系列 + 称为“盐渍”的技术。

【讨论】:

    【解决方案2】:

    MD5 无法解密,

    您应该在您的数据库中搜索您输入的密码的MD5值进行比较。

    SELECT * FROM md5_tbl WHERE password = MD5('password') AND username = 'username'
    

    【讨论】:

      【解决方案3】:

      MD5 的想法是您不必再次解密它。而是对用户提供的密码进行加密,并将其与存储在表中的值进行比较。

      【讨论】:

        【解决方案4】:

        哈希不能反转。它不是“加密”。我建议你看一下here,了解散列和加密之间的区别。

        也就是说,我想您正在尝试在登录时检查用户的密码。使用哈希的方式是:

        1. 用户输入的哈希密码。

        2. 从数据库中检索散列密码。

        3. 比较哈希值(逐字节)——如果匹配,则密码正确。

        【讨论】:

          【解决方案5】:

          你不能。 MD5 不是加密算法,是散列算法。

          你所做的就是对新输入的密码进行哈希处理,并将其与存储在数据库中的哈希值进行比较:

          select *
          from md5_tbl
          where username = ?username and password = md5(?password)
          

          【讨论】:

            【解决方案6】:

            彩虹桌? ;-)

            MD5 是一种单向散列算法。不能“解密”。

            【讨论】:

              【解决方案7】:
              select * from md5_tbl where username = 'username' AND password = MD5('password')
              

              不要忘记清理输入以防止 SQL 注入攻击。

              如果你想反转 MD5,你不能这样做。如果您想加密和解密某些东西,请查看 RSA。

              【讨论】:

                猜你喜欢
                • 2013-02-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-08-09
                • 2016-10-29
                • 2011-10-24
                • 2014-07-02
                • 2021-04-10
                相关资源
                最近更新 更多