1、实现原理
加盐的实现过程通常是在需要散列的字段的特定位置增加特定的字符,打乱原始的字串,使其生成的散列结果产生变化。比如,用户使用了一个密码:
x7faqgjw
经过MD5散列后,可以得出结果:
455e0e5c2bc109deae749e7ce0cdd397
但是由于用户密码位数不足,短密码的散列结果很容易被彩虹表破解,因此,在用户的密码末尾添加特定字串(绿色字体为加盐的字段):
x7faqgjwabcdefghijklmnopqrstuvwxyz
因此,加盐后的密码位数更长了,散列的结果也发生了变化:
4a1690d5eb6c126ef68606dda68c2f79
以上就是加盐过程的简单描述,在实际使用过程中,还需要通过特定位数插入、倒序或多种方法对原始密码进行固定的加盐处理,使得散列的结果更加不容易被破解或轻易得到原始密码,比如(加为加盐字串):
x7afabqgcjw
2、代码样本
PHP
//这是一个简单的、在输入内容之後加入“WIKIPEDIA“并进行散列的PHP代码。
<?php
function hash($a) {
$salt="WIKIPEDIA"; //定义一个加盐字段(WIKIPEDIA),一旦设定并使用,将不可更动。
$b=$a.$salt; //把密码和加盐字段连接。
$b=md5($b); //执行MD5散列。
return $b; //返回散列。
}
?>