【发布时间】:2011-04-15 02:26:25
【问题描述】:
我正在尝试为我的用户密码创建一种双向加密算法。 我需要对其进行加密但没有预先设置的加密通行证(我设置了什么)(盐?)原始密码无法解密
【问题讨论】:
-
加密数据在使用相同密钥时始终可以解密。那是definition of encryption。我猜你的意思是cryptographic hashing。
标签: php encryption
我正在尝试为我的用户密码创建一种双向加密算法。 我需要对其进行加密但没有预先设置的加密通行证(我设置了什么)(盐?)原始密码无法解密
【问题讨论】:
标签: php encryption
对于双向加密,这称为“密钥”,而不是“盐”。查看mcrypt 函数。
【讨论】:
听起来您想使用单向加密哈希而不是双向加密。以下是最佳实践密码存储和验证的一个很好的示例:
保存:
$userPasswordInput = $_POST['password'];
$salt = // 理想情况下,随机生成一个并将其保存到数据库中,否则,使用保存到 php 文件中的常量
$password = sha1($userPasswordInput . $salt);
将 $password(最好是 $salt)保存到数据库。比较时,将 salt 和用户输入连接起来,对其进行 sha1(或任何加密),然后将其与保存的(加密 + salted)密码进行比较。
【讨论】:
我是这样做的:
创建一个 $user + $password
$saltedHash = md5($salt.$password);
现在您有一个加密密码 ($saltedHash) 可以将其保存到数据库中。
如果有人尝试登录,你输入的密码也一样,并与数据库中的密码进行比较。
【讨论】:
最简单的方法(虽然在存储方面非常浪费)是生成一个随机字符串并将其与密码进行异或。 (正如有人已经指出的那样,这称为密钥,而不是盐。)这称为one-time pad。顾名思义,您不能为多个密码重复使用相同的密钥。
【讨论】: