1、aes加密类
namespace app\common;
//也可以直接用define定义常量
//define('KEY','12345');
//define('IV','12345');
/**
* Aes 对称加密
*/
class Aes {
const KEY = '12345';
const IV = '12345';
/**
* 加密 ECB - 128 - addPkcs7Padding
*/
public function encrypts($data)
{
// $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, self::KEY, $this->addPkcs7Padding($data), MCRYPT_MODE_ECB,self::IV);//php7.1以下版本用法
return base64_encode(openssl_encrypt($data,"AES-128-ECB",self::KEY,OPENSSL_RAW_DATA));//php7.1以上版本用法
}
/**
* 解密
*/
public function decrypts($data)
{
// $data =base64_decode($data);
// return $this->stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, self::KEY, $data, MCRYPT_MODE_ECB, self::IV));//php7.1以下版本用法
return openssl_decrypt(base64_decode($data),"AES-128-ECB",self::KEY,OPENSSL_RAW_DATA);//php7.1以上版本用法
}
public function addPkcs7Padding($string, $blocksize = 16)
{
$len = strlen($string); //取得字符串长度
$pad = $blocksize - ($len % $blocksize); //取得补码的长度
$string .= str_repeat(chr($pad), $pad); //用ASCII码为补码长度的字符, 补足最后一段
return $string;
}
public function stripPkcs7Padding($string){
$slast = ord(substr($string, -1));
$slastc = chr($slast);
$pcheck = substr($string, -$slast);
if(preg_match("/$slastc{".$slast."}/", $string)){
$string = substr($string, 0, strlen($string)-$slast);
return $string;
} else {
return false;
}
}
}
2、使用。我是用的Yii框架(但基本用法都差不多)
use app\common\Aes;
//......
$aes = new Aes();
$res = $aes->encrypts($data);//加密
//$res = $aes->decrypts($data);//解密