// osCommerce代码学习笔记和浅显分析,请多指教
// 转载请保留该说明,谢谢。
// zeny@hi.baidu.com/kxsz 11:47 2009-10-14
1.文件位置:
根目录/includes/functions
2.密码功能只有两个功能
2.1加密 加密采用的如下方法
a,循环十次,取得由随机数连接形成的字符串str1。
b,对字符串str1进行md5()加密,产生新字符串str2。
c,取得经过md5加密后的密串str2从左边开始的连续两位字符,存储该字符到变量str3。
d,顺序连接这两位的字符str3与待加密字符串str4,组成新的字符串str5。
e,对新的字符串str5进行MD5加密,然后在加密后的字符串str6尾部追加":"符号,和原两位字符串str3;
f,加密结束。
例如:
a,循环十次,取得由随机数连接形成的字符串str1:**********。
b,对字符串str1进行md5()加密,产生新字符串str2:94****。
c,取得经过md5加密后的密串str2从左边开始的连续两位字符,存储该字符到变量str3:94。
d,顺序连接这两位的字符str3与待加密字符串str4:admin@3721089,组成新的字符串str5:94admin@3721089。
e,对新的字符串str5进行MD5加密,然后在加密后的字符串str6:ce2708a69ced94d60866299f5087cc71尾部追加":"符号,和原两位字符串str3,形成密码:
ce2708a69ced94d60866299f5087cc71:94
f,加密结束。
////
// This function makes a new password from a plaintext password.
function tep_encrypt_password($plain) {
$password = '';
for ($i=0; $i<10; $i++) {
$password .= tep_rand();
}
//like 94*****************
//here $salt to be 94
$salt = substr(md5($password), 0, 2);
//like ce2708a69ced94d60866299f5087cc71:94
//here $salt to be 94
//hera $plain to be admin@3721089
$password = md5($salt . $plain) . ':' . $salt;
return $password;
}
////defined in general.php
// Return a random value
function tep_rand($min = null, $max = null) {
static $seeded;
if (!$seeded) {
mt_srand((double)microtime()*1000000);
$seeded = true;
}
if (isset($min) && isset($max)) {
if ($min >= $max) {
return $min;
} else {
return mt_rand($min, $max);
}
} else {
return mt_rand();
}
}
2.2核对密码
将存储在数据库中的密串以冒号“:”为界,分解成两部分,比如密串ce2708a69ced94d60866299f5087cc71:94,被分解成part0:ce2708a69ced94d60866299f5087cc71
part1:94
以part1开头,顺序连接part1与用户输入的密码串,比如:94admin@3721089
对新字符串94admin@3721089,md5加密:ce2708a69ced94d60866299f5087cc71
与part0比较。
相等则密码正确,否则密码错误,进行相应的逻辑处理。
////
// This function validates a plain text password with an
// encrpyted password
function tep_validate_password($plain, $encrypted) {
if (tep_not_null($plain) && tep_not_null($encrypted)) {
// split apart the hash / salt
//like ce2708a69ced94d60866299f5087cc71:94
$stack = explode(':', $encrypted);
if (sizeof($stack) != 2) return false;
// part0:ce2708a69ced94d60866299f5087cc71
// part1:94
// 94admin@3721089
if (md5($stack[1] . $plain) == $stack[0]) {
return true;
}
}
return false;
}
2.3MD5在线加解密