【问题标题】:Decoding a hash解码哈希
【发布时间】:2012-04-23 22:45:54
【问题描述】:

我正在构建的在线 PHP 应用程序中有一些敏感数据。我想将数据作为哈希存储在数据库中,但这意味着我每次从数据库调用数据时都必须解码数据。我知道哈希的构建不容易被逆向工程,所以我想知道最好的解决方案是什么?

与密码不同,我无法进行哈希比较 - 那么我应该如何保护数据库中的信息?

【问题讨论】:

  • 听起来您需要使用私钥加密数据。散列是不可逆的,因为不止一条数据可以产生相同的散列。

标签: php mysql database hash decode


【解决方案1】:

您正在寻找的是加密,而不是散列。加密是两种方式,这意味着您可以取消加密以查看内容,前提是您拥有这样做的正确信息(您这样做,窥探者没有)。

有关如何使用 PHP 执行此操作的代码,请参阅 this post

【讨论】:

  • 不建议将 Blowfish 用于新应用程序。我建议改用 AES、Serpent 或 Twofish(Blowfish 的继任者)。
  • 感谢您的提醒。我必须更新该代码以反映这一点。
【解决方案2】:

加密哈希函数是单向函数,这意味着您无法反转它们。我想你正在寻找的是encryption。您可以使用McryptOpenSSL 扩展来执行此操作。我的建议是使用 AES 和 256 位密钥(但请记住,您需要确保密钥安全)在将数据插入数据库之前加密数据并在检索时解密。现在,您可以使用methods provided by MySQL,但我自己会使用 Mcrypt。如果您可以提供您试图确保安全的数据的性质和大致大小,我可以推荐一种合适的操作模式。

【讨论】:

    【解决方案3】:

    尝试阅读这篇关于网络密码学的文章:http://www.alistapart.com/articles/web-cryptography-salted-hash-and-other-tasty-dishes/

    您可以使用 SHA-1 哈希对变量进行如下编码:

    sha1('password')
    => 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
    

    MySQL 支持数据加密和解密。例如:

    INSERT INTO people (pet_name) 
      VALUES (AES_ENCRYPT('Schmoopie','my-secret-key'));
    
    SELECT AES_DECRYPT(pet_name, 'my-secret-key') AS pet_name
      FROM people;
    

    这两个例子都来自 List Apart 文章。

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多