两个PHP可逆加密函数

第一个是我自己写的一个简单的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;
    }
  }
  returnresult;
}
//第二个
function anrip_authcode2(str,opt = 'encode', key = 'anrip',expiry = 0, length = 4) {
  //define some keykey = 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 rndrnd = array();
  for(i = 0,j = strlen(keyb);i < 256; i++) {rnd[i] = ord(keyb[i%j]);
  }
  //set boxbox = 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 resultresult = '';
  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]));
  }
  //returnstr
  if(opt == 'encode') {
    returnkeya.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 '';
  }
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注