加密函数:输入参数字符串,返回机密字符串。
Coding::tiriEncode(String)
解密函数:输入上边函数的加密结果,反解到加密前字符串
Coding::tiriDecode(String)
特点:
1.同一个输入,每次输出都不同,可以有若干个加密后的版本。无论密文什么样,都能反解回原文,无信息损失。
2.完全自己写的,估计网上没有完全类似的。用了多年,一直挺靠谱的。
如果有同学感兴趣,可以拿去自用
namespace Tiri\Widget;
class Coding{
static function tiriEncode($str , $factor = 0){
$len = strlen($str);
if(!$len){
return;
}
if($factor === 0){
$factor = mt_rand(1, min(255 , ceil($len / 3)));
}
$c = $factor % 8;
$slice = str_split($str ,$factor);
for($i=0;$i < count($slice);$i++){
for($j=0;$j< strlen($slice[$i]) ;$j ++){
$slice[$i][$j] = chr(ord($slice[$i][$j]) + $c + $i);
}
}
$ret = pack('C' , $factor).implode('' , $slice);
return self::base64URLEncode($ret);
}
static function tiriDecode($str){
if($str == ''){
return;
}
$str = self::base64URLDecode($str);
$factor = ord(substr($str , 0 ,1));
$c = $factor % 8;
$entity = substr($str , 1);
$slice = str_split($entity , $factor);
if(!$slice){
return false;
}
for($i=0;$i < count($slice); $i++){
for($j =0 ; $j < strlen($slice[$i]); $j++){
$slice[$i][$j] = chr(ord($slice[$i][$j]) - $c - $i );
}
}
return implode($slice);
}
static function base64URLEncode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
static function base64URLDecode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
static function stringXor($str){
for ($i = 0; $i < strlen($str); ++$i) {
$str[$i] = chr(ord($str[$i]) ^ 0x7F);
}
return $str;
}
}