Zencart网店用户密码加密和密码校验函数

在includes\functions\password_funcs.php 文件中定义了两函数,分别是:
zen_encrypt_password($plain)和zen_validate_password($plain, $encrypted)
zen_encrypt_password($plain)的作用就是将输入的密码加密,参数输入框输入的字符串。
函数原型:function zen_encrypt_password($plain) { $password = ''; for ($i=0; $i<10; $i++) { $password .= zen_rand(); } $salt = substr(md5($password), 0, 2); $password = md5($salt . $plain) . ':' . $salt; return $password; } 具体的加密方式是,随机获取10个数字,然后取其MD5值的前两个字符。接着将这两个字符跟输入的密码连接起来成为一个字符串,再取其MD5值,将该MD5值和取得的随机数前两个数字通过“:”将他们连接起来成为一个字符串做为保存在数据库中的密码,形式如:2b6e9d1e67105eab75149d46639ba4f3:65
而zen_validate_password($plain, $encrypted)这个函数则是将用户输入的密码跟数据库中的密码对比,如果一样就返回TRUE,否则返回FALSE。
输入的参数为用户输入的密码字符串,和该用户在数据库中的密码。
函数原型: function zen_validate_password($plain, $encrypted) { if (zen_not_null($plain) && zen_not_null($encrypted)) { $stack = explode(':', $encrypted); if (sizeof($stack) != 2) return false; if (md5($stack[1] . $plain) == $stack[0]) { return true; } } return false; } 其具体实现方法是:将数据库中的密码通过“:”来分割成两部分,跟加密的时候相反。然后判断如果返回的数组中有两个元素的话,说明这个密码是正常的密码。否则就返回FALSE,说明该密码不是系统正常的生成。接下来就是比较密码。因为分割出来的密码由两部分组成,一部分就是随机数跟输入密码的MD5值,一部分是随机数。所以只要将数组的第二个元素,即随机数,跟输入的密码连接成一个字符串然后取MD5值,如果该值跟数组的第一个元素一样,说明密码是正常的,结果就返回TRUE.到这里就完成了用户登录密码的校验了