加密解密


/**
* api 加密接口,轻量级加密算法
*/
function erp_api_encrypt($string) {

$encryptKey = md5('test');
$keyLen = strlen($encryptKey);

$data = substr(md5($string.$encryptKey), 0, 8).$string;
$dataLen = strlen($data);

$rndkey = array();
$box = array();
$cipherText = "";

for ($i = 0; $i < 256; $i++) {
$rndkey[$i] = ord($encryptKey[$i % $keyLen]);
$box[$i] = $i;
}

for ($i = 0, $j = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}

for ($i = 0, $j = 0, $k = 0; $i < $dataLen; $i++) {
$k = ($k + 1) % 256;
$j = ($j + $box[$k]) % 256;
$tmp = $box[$k];
$box[$k] = $box[$j];
$box[$j] = $tmp;
$cipherText .= chr(ord($data[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
}

return str_replace('=', '', base64_encode($cipherText));
}

/**
* api 解密接口,轻量级解密算法
*/
function erp_api_decrypt($cipherText) {

$encryptKey = md5('test');
$keyLen = strlen($encryptKey);

$cipherText = base64_decode($cipherText);
$textLen = strlen($cipherText);

$rndkey = array();
$box = array();
$decryptText = "";

for ($i = 0; $i < 256; $i++) {
$rndkey[$i] = ord($encryptKey[$i % $keyLen]);
$box[$i] = $i;
}

for ($i = 0, $j = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}

for ($i = 0, $j = 0, $k = 0; $i < $textLen; $i++) {
$k = ($k + 1) % 256;
$j = ($j + $box[$k]) % 256;
$tmp = $box[$k];
$box[$k] = $box[$j];
$box[$j] = $tmp;
$decryptText .= chr(ord($cipherText[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
}

if (substr($decryptText, 0, 8) == substr(md5(substr($decryptText, 8).$encryptKey), 0, 8)) {
return substr($decryptText, 8);
} else {
return false;
}
}


/**
* api 加密接口,轻量级加密算法 key值不固定,copy erp_api_encrypt
*/
function api_encrypt($string,$key='') {

//$encryptKey = md5('test');
$encryptKey = md5($key);
$keyLen = strlen($encryptKey);

$data = substr(md5($string.$encryptKey), 0, 8).$string;
$dataLen = strlen($data);

$rndkey = array();
$box = array();
$cipherText = "";

for ($i = 0; $i < 256; $i++) {
$rndkey[$i] = ord($encryptKey[$i % $keyLen]);
$box[$i] = $i;
}

for ($i = 0, $j = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}

for ($i = 0, $j = 0, $k = 0; $i < $dataLen; $i++) {
$k = ($k + 1) % 256;
$j = ($j + $box[$k]) % 256;
$tmp = $box[$k];
$box[$k] = $box[$j];
$box[$j] = $tmp;
$cipherText .= chr(ord($data[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
}

return str_replace('=', '', base64_encode($cipherText));
}

/**
* api 解密接口,轻量级解密算法 key值不固定,copy erp_api_decrypt
*/
function api_decrypt($cipherText,$key='') {

//$encryptKey = md5('test');
$encryptKey = md5($key);
$keyLen = strlen($encryptKey);

$cipherText = base64_decode($cipherText);
$textLen = strlen($cipherText);

$rndkey = array();
$box = array();
$decryptText = "";

for ($i = 0; $i < 256; $i++) {
$rndkey[$i] = ord($encryptKey[$i % $keyLen]);
$box[$i] = $i;
}

for ($i = 0, $j = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}

for ($i = 0, $j = 0, $k = 0; $i < $textLen; $i++) {
$k = ($k + 1) % 256;
$j = ($j + $box[$k]) % 256;
$tmp = $box[$k];
$box[$k] = $box[$j];
$box[$j] = $tmp;
$decryptText .= chr(ord($cipherText[$i]) ^ ($box[($box[$k] + $box[$j]) % 256]));
}

if (substr($decryptText, 0, 8) == substr(md5(substr($decryptText, 8).$encryptKey), 0, 8)) {
return substr($decryptText, 8);
} else {
return false;
}
}
原文地址:https://www.cnblogs.com/brady-wang/p/9908486.html