AES是美国联邦政府采用的一种区块加密标准。AES被很多种语音所支持,所以经常在加密传送中使用,今天就简单介绍一下PHP中AES加密解密。
先来一个例子
$key = “AKlMU89D3FchIkhK”;
$str = json_encode(array(‘tag’=>’204’));
function encode( $key, $str ){
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($size,MCRYPT_RAND);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str,MCRYPT_MODE_ECB, $iv);
}
function decode( $key, $str ){
$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($size ,MCRYPT_RAND);
return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str,MCRYPT_MODE_ECB, $iv);
}
$str1=encode($key, $str);
$str2=decode($key,$str1);
var_dump($str2);
这个时候你打印出来会发现string(16),而且json_decode变不成数组了,这是由于aes由于你的字符串不够16个字节给你在末尾填充的你看不到的0而来的。解决办法:
var_dump(json_decode(rtrim($str2,”\0″),true));
这样就可以了,去掉后面的填充字节,就可以变成php使用的字符串。
有时候使用PHP加密解密出来的是13个字节,这是由于你参数设置MCRYTP_MODE_CFB,具体作用你可以百度,不过为了统一最好是用MCRYPT_MODE_ECB,因为这个是所有语音都支持的。
同时如果需要传送最好在用base64_decode和base64_encode在加密解密一下,这样就不会照成数据丢失问题。