header("Content-Type: text/html; charset=utf-8");
include "./common.php";
//非常给力的authcode加密函数,Discuz!经典代码(带详解)
//函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。
function authcode($string , $operation = 'DECODE' , $key = '' , $expiry = 0) {
// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙
$ckey_length = 4;
// 密匙
$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
// 密匙a会参与加解密
$keya = md5(substr($key , 0 , 16));
// 密匙b会用来做数据完整性验证
$keyb = md5(substr($key , 16 , 16));
// 密匙c用于变化生成的密文
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string , 0 , $ckey_length) : substr(md5(microtime()) , - $ckey_length)) : '';
// 参与运算的密匙
$cryptkey = $keya . md5($keya . $keyc);
$key_length = strlen($cryptkey);
// 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),
//解密时会通过这个密匙验证数据完整性
// 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确
$string = $operation == 'DECODE' ? base64_decode(substr($string , $ckey_length)) : sprintf('%010d' , $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb) , 0 , 16) . $string;
$string_length = strlen($string);
$result = '';
$box = range(0 , 255);
$rndkey = array();
// 产生密匙簿
for ($i = 0 ; $i <= 255 ; $i ++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
// 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度
for ($j = $i = 0 ; $i < 256 ; $i ++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
// 核心加解密部分
for ($a = $j = $i = 0 ; $i < $string_length ; $i ++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
// 从密匙簿得出密匙进行异或,再转成字符
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if ($operation == 'DECODE') {
// 验证数据有效性,请看未加密明文的格式
if ((substr($result , 0 , 10) == 0 || substr($result , 0 , 10) - time() > 0) && substr($result , 10 , 16) == substr(md5(substr($result , 26) . $keyb) , 0 , 16)) {
return substr($result , 26);
} else {
return '';
}
} else {
// 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因
// 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码
return $keyc . str_replace('=' , '' , base64_encode($result));
}
}
$key = 'www.helloweba.com';
$str = '非常给力的authcode加密函数,Discuz!经典代码(带详解)';
$str = json_encode($arr = [
['id'=>5,'name'=>'qwefv','age'=>12],
['id'=>2,'name'=>'sdgs','age'=>17],
['id'=>7,'name'=>'rtj','age'=>11],
['id'=>6,'name'=>'fgs','age'=>16],
]);
dd('加密的数据--=======================================================================================');
dd($str);
$encode = authcode($str , 'ENCODE' , $key , 20); //加密
dd($encode);
/*$encode = 'ab4b23VeCEMjfKfI5A7FsnUPNbSflYmsH9Vx8bu2CRQ6D6Q';*/
$decode = authcode($encode , 'DECODE' , $key , 20); //解密
dd($decode);
dd(json_decode($decode));
function getdir1($path){
$pathArr = [];
searchDir1($path,$pathArr);
return $pathArr;
}
function searchDir1($path,&$pathArr){
if (is_dir($path)){
$pathArr[] = $path;
$opendir = opendir($path);
while ($file = readdir($opendir)){
if ($file != '.' && $file != '..'){
searchDir1($path.'/'.$file,$pathArr);
}
}
closedir($opendir);
}else{
$pathArr[] = $path;
}
}
dd(getdir1('img'));
dd('/*----------------------------RSA 加解密 $privateKey 和 $publicKey 的长度影响到 能加解密的字符串的长度-----------------------------------------------------------------------------------------*/');
/*----------------------------RSA 加解密 $privateKey 和 $publicKey 的长度影响到 能加解密的字符串的长度-----------------------------------------------------------------------------------------*/
// http://web.chacuo.net/netrsakeypair 在线生成非对称加密公钥私钥对、在线生成公私钥对、RSA Key pair create、生成RSA密钥对
// 生成密钥位数 的大小,影响到能加解密的字符串的长度
/**
* 解密
* @param string $encryptString
* @return string
*/
function privateDecrypt($encryptString = '')
{
$decrypted = '';
$key = "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDa8/M5WIpWjyF2jr+Ikg/4L2HDljcG7TN4fdrTWXyQK4fnYL3uh2mVUxi918Z+Y+msJSPAE5mS4AN219OcQyPXUVvI/Qw18B8rCd6f+pWpl0ecGi4VjZBgXevezqQcnNJbQPf7xIYsGEgaGQRzfuKJ0Ym33A0IN38zaW2aGAxSTQa0bUiFIuveZUlGb/NLCSlY1zb2bm4ju+w4pCNe5YQtKmy7Cp9Xt9UlzshbAfErxdYmf68RgUQkb4/NxjkLz7JxtGrLSOhkdNPVYFQe9oYpdfuVw8v38d4jiiMfUFy0YdxBwdthQTTmowiSqExBHtr/bL35XM2lEremGwoD+LwDAgMBAAECggEBANraSryATs6UhKs/ph05ejLmEX9xj5Eh2XfPvMHSyZpFmLNi1JYuzg+PHsTrgCFndvM1sFVWggP4XB4XPxILXjDjxq3Qmbr0SAM5+0fHLn90kgRrerLabHyWhKSRwiJDclP6TaVfW4mJv9AuP2++XWvKgTDBCFm1NzTJZd9HuFEtiTrtw0hFmdM76fN4TfOe0COqaYQJAW+r1w+H6YXynppwTQtFnYf6WPjQWEAORtVxeT/ww0nkDSOsuPP5izCYccQ2QDnam6i0a+z/af+spPiKc1dgGodbxywfQRFoa10ouLrdakbazk6sRvvxbYKoD22IlxisavD5Xxwn36zg5CECgYEA9PV4qQ3PJ+eEC64d83tc5Ck6V50TNTt4eUCghjYPnJCRfDZKBDmPEA2ck9xou40AFEpYnb2dFTRlbRGtgtHBaHQ2OpPDS51NcPaF7BhX8kjQA2omBXdXEpYTv+XcplcALgPNswKEL62RluFbLm5JHgNgXc6cr/v3X67VtaM5jnMCgYEA5NJm1TFg9VykB3nOSXgXlZU91WbIOMiSlTOFYc5AgCLRPWnj51Ayj0DvgN/ZswlCg0ymzJFy0RCt+KqiPKQkrCn1NUL9E8xS5CsUs6IYjAyThjLhJzsZnWNVMEYEpgLzWdrOx/6NCqAziuXvqsi4BYisSabvq27GbEMK7e5jqDECgYEAwRzr/MqIL7tS3CpuLk9o0e62se+A/wxdU6nhYy0nbZSDPVtHSsFdyZgRgnfWkVT9ZQGfjuu29MqT00KGeYWHZiOHxPJMmkXukUmoFpKycq14X9jFFLYajOqHs1cxdmlMGPqipacsMrIw/rO2wIntVp3u0MVbvVl0kZgxnrqJW4UCgYEAuDtnLDOLm0Gxl4tMuf6FDpyQomcUwhNLYfGPbMYBTKm7yjSdmDoL2ycvLpYM04ebE9f9XCunRAin6dSIt0Z5eFx33yBGX1BdVPQSwOa72NavWJdSjKGa6At4JVvalkc945S2dHPQ30NI/IZRRzJAZ8Q44zwTL/YKsFPyUstjVaECgYEA0ke0r5NG1I5pJmLQFuaFFMxeKkzU/J7RnQoDkPA5xDwQ7GFB19VqKUQbywuvnLFtoF1Xu2cXtbZ/ulvDQQHIM0B7TJXgI+DofujkiJhPeMNNx2mnUtGHbIvFVdx2EQzQGg2hDvnitJabN1uowtVYmoxtNG/5tnXiGYUvxcGnCNY=";
$key_eol = (string) implode("\n", str_split((string) $key, 64));
$privateKey = (string) "-----BEGIN RSA PRIVATE KEY-----\n" . $key_eol . "\n-----END RSA PRIVATE KEY-----";
openssl_private_decrypt(base64_decode($encryptString), $decrypted, $privateKey);
return $decrypted;
}
/**
* 加密
* @param string $data
* @return string
*/
function publicEncrypt($data = '')
{
$encrypt_data = '';
// $publicKey = self::JS_ENCRYPT;
// openssl_public_encrypt($data, $encrypt_data, $publicKey);
$key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2vPzOViKVo8hdo6/iJIP+C9hw5Y3Bu0zeH3a01l8kCuH52C97odplVMYvdfGfmPprCUjwBOZkuADdtfTnEMj11FbyP0MNfAfKwnen/qVqZdHnBouFY2QYF3r3s6kHJzSW0D3+8SGLBhIGhkEc37iidGJt9wNCDd/M2ltmhgMUk0GtG1IhSLr3mVJRm/zSwkpWNc29m5uI7vsOKQjXuWELSpsuwqfV7fVJc7IWwHxK8XWJn+vEYFEJG+PzcY5C8+ycbRqy0joZHTT1WBUHvaGKXX7lcPL9/HeI4ojH1BctGHcQcHbYUE05qMIkqhMQR7a/2y9+VzNpRK3phsKA/i8AwIDAQAB";
$key_eol = (string) implode("\n", str_split((string) $key, 64));
$publicKey = (string) "-----BEGIN PUBLIC KEY-----\n" . $key_eol . "\n-----END PUBLIC KEY-----";
openssl_public_encrypt($data, $encrypt_data, $publicKey);
$encrypt_data = base64_encode($encrypt_data);
return $encrypt_data;
}
$str = json_encode($arr = [
'id'=>5,
'name'=>'qwefv',
'name1'=>'qwefv',
'name2'=>'qwefvqwefvqwefvqwefvqwefvqwefvqwefvqwefvqwefvqwefvqwefv',
'age'=>12,
'age3'=>12,
'age4'=>12,
'data'=>[
'id'=>5,
'name1'=>'qwefv',
'name2'=>'qwefv',
'name3'=>'qwefv',
'age4'=>12,
'age5'=>12,
'age6'=>12,
]
]);
dd('明文:'.$str);
$mdstr = publicEncrypt($str);
dd($mdstr);
//使用
$param = privateDecrypt($mdstr);
/*$array = json_decode($param, true);*/
dd($param);
一键复制
编辑
Web IDE
原始数据
按行查看
历史