盐(Salt),在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。
在大部分情况,盐是不需要保密的。盐可以是随机产生的字符串,其插入的位置可以也是随意而定。如果这个散列结果在将来需要进行验证(例如:验证用户输入的密码),则需要将已使用的盐记录下来。
--摘自维基百科
//这是一个简单的、在输入内容之後加入“WIKIPEDIA“并进行散列的PHP代码。
<?php
function hash($a) {
$salt="WIKIPEDIA"; //定义一个加盐字段(WIKIPEDIA),一旦设定并使用,将不可更动。
$b=$a.$salt; //把密码和加盐字段连接。
$b=sha($b); //执行MD5散列。
return $b; //返回散列。
}
?>
数据库表设计
mysql> desc User;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| user_name | varchar(50) | NO | | | |
| slat | char(50) | NO | | | |
| password | varchar(256)| NO | | | |
+----------+-------------+------+-----+---------+-------+
在用户注册或修改密码的过程中在随机生成固定长度的字符串salt,然后以自定义的方式拼接字符串,然都执行MD5或SHA散列加密方式,将salt和加密后的密码存入数据库即可