第一个是我自己写的一个简单的PHP可逆加密函数
第二个是我根据Discux!X的函数改写的一个较为复杂的PHP可逆加密函数

//第一个
function anrip_authcode1($str, $opt = 'encode', $key = 'anrip') {
  $result = '';
  $self = __FUNCTION__;
  if($opt == 'mcrypt') {
    $key = md5($key);
    $key_length = strlen($key);
    $str_length = strlen($str);
    for($i = $m = 0; $i < $str_length; $i++, $m++) {
      $m = $m == $key_length ? 0 : $m;
      $result .= $str[$i] ^ $key[$m];
    }
  } elseif($opt == 'encode') {
    $rnd = md5(mt_rand().$key);
    $rnd_length = strlen($rnd);
    $str_length = strlen($str);
    for($i = $m = 0;$i < $str_length; $i++, $m++) {
      $m = $m == $rnd_length ? 0 : $m;
      $result .= $rnd[$m].($str[$i] ^ $rnd[$m]);
    }
    $result = base64_encode($self($result, 'mcrypt', $key));
    $result = str_replace('==', '', $result);
    $result = str_replace('+', '*', $result);
  } elseif($opt == 'decode') {
    $str = str_replace('*', '+', $str);
    $str = $self(base64_decode($str), 'mcrypt', $key);
    $str_length = strlen($str);
    for($i = 0; $i < $str_length; $i++) {
      $md5 = $str[$i];
      $result .= $str[++$i] ^ $md5;
    }
  }
  return $result;
}
//第二个
function anrip_authcode2($str, $opt = 'encode', $key = 'anrip', $expiry = 0, $length = 4) {
  //define some key
  $key = md5(defined(AUTH_KEY) ? AUTH_KEY : $key);
  $keya = $length > 0 ? substr($opt == 'encode' ? md5(microtime()) : $str, 0, $length) : '';
  $keyb = md5(substr($key, 0, 16)).md5($key.$keya);
  $keyc = md5(substr($key, 16, 16).$keya.$keyb);
  //set $rnd
  $rnd = array();
  for($i = 0, $j = strlen($keyb); $i < 256; $i++) {
    $rnd[$i] = ord($keyb[$i%$j]);
  }
  //set $box
  $box = range(0, 255);
  for($j = $i = 0; $i < 256; $i++) {
    $j = ($j + $box[$i] + $rnd[$i]) % 256;
    list($box[$i], $box[$j]) = array($box[$j], $box[$i]);
  }
  //get $result
  $result = '';
  $expiry = $expiry ? $expiry + time() : 0;
  $str = $opt == 'encode' ? sprintf('%010d', $expiry).substr(md5($str.$keyc), 0, 16).$str : base64_decode(substr($str, $length));
  for($a = $i = $j = 0, $l = strlen($str); $i < $l; $i++) {
    $a = ($a + 1) % 256;
    $j = ($j + $box[$a]) % 256;
    list($box[$a], $box[$j]) = array($box[$j], $box[$a]);
    $result .= chr(ord($str[$i]) ^ ($box[($box[$a]+$box[$j]) % 256]));
  }
  //return $str
  if($opt == 'encode') {
    return $keya.str_replace('=', '', base64_encode($result));
  }
  else {
    $str = substr($result, 26);
    $expiry = substr($result, 0, 10);
    if(($expiry == 0 || $expiry > time()) && substr($result, 10, 16) == substr(md5($str.$keyc), 0, 16)) {
      return $str;
    }
    else return '';
  }
}

因为项目需要,今天写了一个JS版的根据给定的时间获取Unix时间戳的转换函数,不多废话,直接上代码。

/*!
 * 根据给定的时间获取Unix时间戳
 * @time : 时间;字符:'yyyy-mth-dd hh:mm:ss'
 * @tzone: 时区;整数:[-12,+12]
 */
function timestamp(time, tzone) {
  if(time) {
    var t = time.match(/((\d{4})\D(\d\d)\D(\d\d))(\s(\d\d)\D(\d\d)\D(\d\d))?/) || [];
    if(t[8]) time = new Date(t[2], t[3]-1, t[4], t[6], t[7], t[8]);
    else if(t[4]) time = new Date(t[2], t[3]-1, t[4]);
    else return 0;
  }
  return Math.round((time||new Date()).getTime()/1000)+(tzone||8)*3600;
}

上述函数支持以下四种格式的参数:

timestamp(); //当前时间戳
timestamp('1970-01-01'); //表示当日0点
timestamp('1970-01-01 00:00:01'); //日期以-分割
timestamp('1970/01/01 00:00:01'); //日期以/分割

在做xServer批处理版控制台时写了这个方法,这里给出来,供大家参考:

:check_network
  echo. && echo 测试网络环境...
  ping 127.0.0.1 -n 2 >nul || (
    echo 测试失败,请检查网络连接.
    goto check_network
  )
  goto :EOF

本程序用于检测本地网络是否可用,不可用将循环检测,直到可用跳出循环。

今天做小春的一个小项目,又一次遇到了“框架自适应高度和宽度”的问题,此次记录下来代码备查。

<html>
<head>
<title>小春网</title>
</head>
<frameset cols="100%" border="0" frameborder="no" framespacing="0">
  <frame src="http://www.xiaochuncnjp.com" />
  <noframes>
    <body>请点击<a href="http://www.xiaochuncnjp.com">这里</a>访问本站镜像。</body>
  </noframes>
</frameset>
</html>