标准PHP的AES加密算法类
分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128','ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识。
<?php
/**
*AES128加解密类
*@authordy
*
*/
defined('InEjbuy')orexit('AccessInvalid!');
classAes{
//密钥
private$_secrect_key;
publicfunction__construct(){
$this->_secrect_key='MYgGnQE2jDFADSFFDSEWsdD';
}
/**
*加密方法
*@paramstring$str
*@returnstring
*/
publicfunctionencrypt($str){
//AES,128ECB模式加密数据
$screct_key=$this->_secrect_key;
$screct_key=base64_decode($screct_key);
$str=trim($str);
$str=$this->addPKCS7Padding($str);
$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
$encrypt_str= mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$screct_key,$str,MCRYPT_MODE_ECB,$iv);
returnbase64_encode($encrypt_str);
}
/**
*解密方法
*@paramstring$str
*@returnstring
*/
publicfunctiondecrypt($str){
//AES,128ECB模式加密数据
$screct_key=$this->_secrect_key;
$str=base64_decode($str);
$screct_key=base64_decode($screct_key);
$iv=mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
$encrypt_str= mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$screct_key,$str,MCRYPT_MODE_ECB,$iv);
$encrypt_str=trim($encrypt_str);
$encrypt_str=$this->stripPKSC7Padding($encrypt_str);
return$encrypt_str;
}
/**
*填充算法
*@paramstring$source
*@returnstring
*/
functionaddPKCS7Padding($source){
$source=trim($source);
$block=mcrypt_get_block_size('rijndael-128','ecb');
$pad=$block-(strlen($source)%$block);
if($pad<=$block){
$char=chr($pad);
$source.=str_repeat($char,$pad);
}
return$source;
}
/**
*移去填充算法
*@paramstring$source
*@returnstring
*/
functionstripPKSC7Padding($source){
$source=trim($source);
$char=substr($source,-1);
$num=ord($char);
if($num==62)return$source;
$source=substr($source,0,-$num);
return$source;
}
}
以上就是本文所述的全部内容了,希望对大家学习php的AES加密算法类有所帮助。