我正在构建的在线 PHP 应用程序中有一些敏感数据。我想将数据作为哈希存储在数据库中,但这意味着我每次从数据库调用数据时都必须解码数据。我知道哈希的构建不容易被逆向工程,所以我想知道最好的解决方案是什么?
与密码不同,我无法进行哈希比较 - 那么我应该如何保护数据库中的信息?
您正在寻找的是加密,而不是散列。加密是两种方式,这意味着您可以取消加密以查看内容,前提是您拥有这样做的正确信息(您这样做,窥探者没有)。
有关如何使用 PHP 执行此操作的代码,请参阅这篇文章。
加密哈希函数是单向函数,这意味着您无法反转它们。我认为您正在寻找的是加密。您可以使用Mcrypt或OpenSSL扩展来执行此操作。我的建议是使用带有 256 位密钥的AES(但请记住,您需要确保密钥安全)在将数据插入数据库之前加密数据并在检索时对其进行解密。现在,您可以使用MySQL 提供的方法,但我自己会使用 Mcrypt。如果您可以提供您试图确保安全的数据的性质和大致大小,我可以推荐一种合适的操作模式。
尝试阅读这篇关于网络密码学的文章: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 文章。