class CryptAES
{
protected $mode = MCRYPT_MODE_ECB;
protected $pad_method = NULL;
protected $secret_key = '';
protected $iv = '';
public function set_cipher($cipher)
$this-cipher = $cipher;
}
public function set_mode($mode)
$this-mode = $mode;
public function set_iv($iv)
$this-iv = $iv;
public function set_key($key)
$this-secret_key = $key;
protected function pad_or_unpad($str, $ext)
if ( is_null($this-pad_method) )
return $str;
else
$func_name = __CLASS__ . '::' . $this-pad_method . '_' . $ext . 'pad';
if ( is_callable($func_name) )
$size = mcrypt_get_block_size($this-cipher, $this-mode);
return call_user_func($func_name, $str, $size);
protected function pad($str)
return $this-pad_or_unpad($str, '');
protected function unpad($str)
return $this-pad_or_unpad($str, 'un');
public function encrypt($str)
$str = $this-pad($str);
$td = mcrypt_module_open($this-cipher, '', $this-mode, '');
if ( empty($this-iv) )
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$iv = $this-iv;
mcrypt_generic_init($td, $this-secret_key, $iv);
$cyper_text = mcrypt_generic($td, $str);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $rt;
public function decrypt($str){
$rt = $decrypted_text;
return $this-unpad($rt);
$bindata = '';
$length = strlen($hexdata);
return $bindata;
$pad = $blocksize - (@strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
$pad = ord($text{strlen($text) - 1});
if ($pad strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
$plainText = 'this is a string will be AES_Encrypt';
$aes = new CryptAES();
$aes-set_key($keyStr);
$encText = $aes-encrypt($plainText);
$decString = $aes-decrypt($encText);
echo $encText,"n",$decString;*/
AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范.它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法.本文展示了AES的概貌并解析了它使用的算法.包括一个完整的C#实现和加密.NET数据的举例.在读完本文后你将能用AES加密、测试 基于AES的软件并能在你的系统中使用AES加密.
最近两年一直从事与金融相关项目的开发与维护.但是,关于 PHP 加密解密的最佳实践,网上没有人给出一个完美的总结.恰逢最近看了<<图解密码技术>>一书,对 PHP 加解密有了更深刻的认识.
为了避免各位看枯燥的文字理论,开篇我就把总结给出:
第一段:对称加密
对称加密的特点是加解密速度快,加密后的密文强度目前还没有硬解的可能性.但是,在未来随着计算机性能的提升有可能会出现被破解的可能性.
对称加密的缺点也很明显.对称加密的加密过程与解密过程使用的是同一把密钥.一旦泄漏密钥,加密就失去了任何意义.
根据<<图解密码技术>>一书的推荐,对称加密目前推荐使用 AES.在 PHP 当中要实现 AES 加解密,是使用 openssl 扩展来实现.所以,请确保你的 PHP 已经开启了 openssl 扩展.
可以通过如下方式检测:
或者如下方式检测:
AES 的加密模式属于分组密码模式.所谓分组密码,是加密时把明文按照固定的长度分组,然后再进行加密.当然,细节之处很很多不同.AES 分组模式有多种:ECB、CBC、CFB、OFB、CTR 五种分组模式.目前优先推荐使用 CBC 模式.
如果使用 CBC 模式,那么在加密的时候,就需要一个前置的加密向量 IV.当初博主在使用 AES 来加密的时候,就很奇怪一个对称加密为何要这个向量.因为,在博主寒冰的潜意识里,对称加密只需要一个密钥就 Ok 了.没想到 AES 加密还有多种模式,而这个 CBC 模式恰恰就需要一个这样的向量值.关于这个向量大家可以在网上查阅相关的资料.这个东西非常重要,也非常好理解.
关于 PHP AES 加解密会用到的相关方法:
第二段:非对称加密
非对称加密是指公钥加密私钥解密,私钥加密公钥解密的算法.非对称加密的算法有很多.<<图解密码技术>>一书推荐使用 RSA 算法.它使用起来也非常简单.
要使用 RSA 算法.首先,我们必须生成一对公钥私钥.其实生成公钥私钥很简单.
在 Linux 系统,直接使用如下命令生成:
此命令会生 ~/.ssh/ 目录下生成两个文件:
id_rsa 是私钥, is_rsa.pub 是公钥.
关于 PHP RSA 加解密会用到的相关方法:
以上就是土嘎嘎小编为大家整理的aes加密解密如何用php实现相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!