1. mcrypt加解密 – 此方法不推荐使用
public function enstrhex($str,$key) {
$td = mcrypt_module_open('twofish', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$keystr = substr(md5($key), 0, $ks);
mcrypt_generic_init($td, $keystr, $iv);
$encrypted = mcrypt_generic($td, $str);
mcrypt_module_close($td);
$hexdata = bin2hex($encrypted);
return $hexdata;
}
public function destrhex($str,$key) {
$td = mcrypt_module_open('twofish', '', 'ecb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$keystr = substr(md5($key), 0, $ks);
mcrypt_generic_init($td, $keystr, $iv);
$encrypted = pack( "H*", $str);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $decrypted;
}
2. RSA加解密
public static function rsaSign($data){
$priKey = file_get_contents(CgConfig::$privateKeyFilePath);
$res = openssl_get_publickey($priKey);
$sign = false;
if (openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256)) {
$sign = base64_encode($sign);
}
return $sign;
}
public static function rsaVerify($data,$sign){
$pubKey = file_get_contents(CgConfig::$publiKeyFilePath);
$res = openssl_get_publickey($pubKey);
$ret = false;
$sign = base64_decode($sign);
if ($sign !== false) {
switch (openssl_verify($data, $sign, $res, "SHA256")) {
case 1:
$ret = true;
break;
case 0:
case -1:
default:
$ret = false;
break;
}
}
return $ret;
}
3. AES加解密
public static function aesEncrypt($data,$k,$v){
$returnData = openssl_encrypt($data,'AES-128-CBC',$k,OPENSSL_RAW_DATA,$v);
return base64_encode($returnData);
}
public static function aesDecrypt($data,$k,$v){
$returnData = openssl_decrypt(base64_decode($data),'AES-128-CBC',$k,OPENSSL_RAW_DATA,$v);
return json_decode($returnData,true);
}
4. 自定义加解密
public function encryptParams(){
$data['params'] = $_GET;
$signStr = '';
foreach($_GET as $v){
if(is_array($v)){
return ['retCode'=>1004];
}else{
$signStr .= $v;
}
}
$data['signStr'] = md5(urlencode($signStr));
return base64_encode(json_encode(($data)));
}
private function decode($data){
$data = json_decode(base64_decode($data),true);
if(!isset($data['params']) || empty($data['signStr'])|| !is_array($data['params'])||!is_string($data['signStr'])){
return ['retCode'=>1003];
}
ksort($data['params']);
$signStr = '';
foreach($data['params'] as $v){
if(is_array($v)){
return ['retCode'=>1004];
}else{
$signStr .= $v;
}
}
if(md5(strtolower(urlencode($signStr)))!= $data['signStr']){
return ['retCode'=>1005];
}
$this->params = $data['params'];
return ['retCode'=>1000];
}
private function analysisToken($token){
$data = json_decode(base64_decode($token),true);
if(empty($data['params'])|| empty($data['signStr'])|| !is_array($data['params'])||!is_string($data['signStr'])){
return ['retCode'=>1007];
}
if(empty($data['params']['member_id']) || !isset($data['params']['last_login_time'])){
return ['retCode'=>1007];
}
ksort($data['params']);
$this->memberInfo = Member::findOne(['member_id'=>$data['params']['member_id']]);
if(!$this->memberInfo){
return ['retCode'=>1007];
}
if($this->memberInfo->last_login_time != $data['params']['last_login_time']){
return ['retCode'=>1007];
}
if($data['signStr'] != sha1(sha1(md5(json_encode($data['params']))) . \Yii::$app->params['TOKEN_SIGN_STR']) ){
return ['retCode'=>1007];
}
return ['retCode'=>1000];
}
public function createToken($member_id){
$memberInfo = Member::findOne(['member_id'=>$member_id]);
if(!$memberInfo){
return "";
}
$arr = [
'last_login_time'=>$memberInfo->last_login_time,
'member_id'=>$member_id,
];
ksort($arr);
$signStr = sha1(sha1(md5(json_encode($arr))) . \Yii::$app->params['TOKEN_SIGN_STR']);
$token = base64_encode(json_encode(['params'=>$arr,'signStr'=>$signStr]));
return $token;
}