2012-04-11 99 views
1

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

不像密码,我不能做一个哈希比较 - 所以我应该如何保护在数据库中的信息?

+2

听起来像是你需要将数据用私钥加密。哈希是不可逆的,因为不止一个数据可以产生相同的哈希。 – 2012-04-11 15:34:16

回答

5

你要找什么是加密的,而不是散列。加密是两种方式,这意味着您可以解密以查看内容,假设您拥有适当的信息(您确实需要,窥探者不需要)。

this post关于如何使用PHP做这个代码。

+1

Blowfish不适合新应用。我建议使用AES,蛇或Twofish(Blowfish的继任者)。 – 2012-04-11 15:54:42

+0

感谢您的支持。我将不得不更新该代码以反映这一点。 – 2012-04-11 15:59:19

0

加密散列函数是单向函数,也就是说你不能扭转他们。我认为你正在寻找的是encryption。您可以使用McryptOpenSSL扩展来执行此操作。我的建议是使用带有256位密钥的AES(但请记住,您需要保证密钥安全),以在将数据插入数据库并在检索时解密数据之前加密数据。现在,您可以使用methods provided by MySQL,但我会使用Mcrypt自己。如果您可以提供您试图保持安全的数据的性质和大小,我可以推荐适合的操作模式。

0

尝试阅读这篇文章的网络加密: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的文章。