$fixedKey = hash($entype, $key);
$egiskeys = md5(substr($fixedKey, $half_len, $half_len));
$runtoKey = $key_length ? ($operation ? substr(hash($entype, microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
$keys = hash($entype, substr($runtoKey, 0, $half_len) . substr($fixedKey, 0, $half_len) . substr($runtoKey, $half_len) . substr($fixedKey, $half_len));
$string = $operation ? sprintf('%010d', $outtime ? $outtime + time() : 0) . substr(md5($string . $egiskeys), 0, $half_len) . $string : base64_decode(substr($string, $key_length));
$i = 0;
$result = '';
$string_length = strlen($string);
for ($i = 0; $i < $string_length; $i++) {
$result .= chr(ord($string{$i}) ^ ord($keys{$i % $long_len}));
}
if ($operation) {
return $runtoKey . str_replace('=', '', base64_encode($result));
} else {
if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, $half_len) == substr(md5(substr($result, $half_len + 10) . $egiskeys), 0, $half_len)) {
return substr($result, $half_len + 10);
} else {
return '';
}