2010-09-21 52 views
0

我试图为我的用户密码创建一个双向加密算法。 我需要它加密,但没有预先设置的加密通(我设置了什么)(盐?)原始密码不能解密PHP双向加密加密

+1

使用相同密钥时,加密数据始终可以解密。这就是[加密的定义](http://en.wikipedia.org/wiki/Encryption)。我想你的意思是[密码哈希](http://en.wikipedia.org/wiki/Cryptographic_hash_function)。 – Gumbo 2010-09-21 09:45:39

回答

2

这听起来像你想要使用单向密码散列而不是双向散列,双向加密。下面是最佳实践密码存储和验证的一个很好的例子:

要保存它:

$ userPasswordInput = $ _ POST [“密码”];

$盐= //理想的是,生成一个随机并将其保存到该数据库,否则,使用保存到PHP文件

$密码= SHA1恒定($ $ userPasswordInput盐);

保存$密码(最好$盐)到数据库。比较时,连接salt和用户输入,将其加密(或无论哪种加密),然后将其与保存的(加密的+盐渍的)密码进行比较。

+0

我这样做会用于加密,但。我无法解密它,并使用$ salt获取密码? – Daniel 2010-09-21 09:33:39

2

对于双向加密,这称为“密钥”,而不是“盐”。检出mcrypt函数。

+1

我将在运行PHP的多个服务器/站点上使用它。大多数没有安装该扩展。很难更新每个服务器/站点。 – Daniel 2010-09-21 09:38:12

+0

我需要的东西,内置到php – Daniel 2010-09-21 10:10:33

+0

我只是寻找一些函数,我可以用它来编码和解码一个哈希,我想一个哈希只有解码如果使用了正确的密钥(编码时输入的那个) – Daniel 2010-09-21 11:25:49

0

我这样做的:

创建一个$用户+ $密码

$saltedHash = md5($salt.$password); 

现在你有一个加密的密码($ saltedHash)将其保存到数据库。

如果有人尝试登录,则对输入的密码进行相同操作,并将其与db中的密码进行比较。

0

最简单的方法(尽管在存储方面非常浪费)是生成一个随机字符串并将其异或为密码。 (正如有人已经指出的那样,这被称为密钥,而不是盐。)这称为one-time pad。顾名思义,您不能重复使用相同的密钥来输入多个密码。