分享

[开源代码学习]005

 sumi2005 2011-12-06
[开源代码学习]-osCommerce-通用功能-密码操作-password_funcs.php
2009年10月14日 星期三 11:51

// 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在线加解密

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多