前几天在迷渡博客,看到了国外一些牛人在对密码进行加密的时候,都是使用比对哈希值,来验证密码的,当时感觉有点做作,觉得一个密码有必要那么复杂吗?
先说说我平时在公司是怎么样加密的吧。
首先,在创建用户密码的时候,在用户表,有一个字段是 key ,存储的是随机生成的字符串,然后在对 用户输入的密码 加 上 key 进行md5 加密
$password = $_POST['password'].$key
$password = md5($password)
然后当用户登录的时候,从数据库取出 key ,连接在一起进行加密,验证,个人觉得也算是很安全了吧
今晚,在QQ上与一位前辈聊天,在聊天的时候,有聊到加密这块,他说:我这种加密方式只能是稍微安全点而已,如果数据库被破,正好别人又知道密码,那不是一样的吗?
好吧。。我都没想到这块,看来前辈的几年编程经验不是盖的啊,然后有跑到迷渡看了下那个加密,那时就感觉别人不是做作了,而是真的有那个必要啊!
看看,使用phpass加密的方式吧
// Include phpass 库
require_once('phpass-03/PasswordHash.php')
// 初始化散列器为不可移植(这样更安全)
$hasher = new PasswordHash(8, false);
// 计算密码的哈希值。$hashedPassword 是一个长度为 60 个字符的字符串.
$hashedPassword = $hasher->HashPassword('my super cool password');
// 你现在可以安全地将 $hashedPassword 保存到数据库中!
// 通过比较用户输入内容(产生的哈希值)和我们之前计算出的哈希值,来判断用户是否输入了正确的密码
$hasher->CheckPassword('the wrong password', $hashedPassword); // false
$hasher->CheckPassword('my super cool password', $hashedPassword); // true
?>
这样的话,虽然有点麻烦,但是确实是避免了,数据库被破密码泄露的危险了