加密函數(shù):輸入?yún)?shù)字符串,返回機(jī)密字符串家肯。
Coding::tiriEncode(String)
解密函數(shù):輸入上邊函數(shù)的加密結(jié)果倦挂,反解到加密前字符串
Coding::tiriDecode(String)
特點(diǎn):
1.同一個(gè)輸入畸颅,每次輸出都不同,可以有若干個(gè)加密后的版本妒峦。無(wú)論密文什么樣重斑,都能反解回原文,無(wú)信息損失肯骇。
2.完全自己寫(xiě)的窥浪,估計(jì)網(wǎng)上沒(méi)有完全類似的。用了多年笛丙,一直挺靠譜的漾脂。
如果有同學(xué)感興趣,可以拿去自用
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;
}
}