在java加密选择无填充模式如果不足128字节的话,调用方法会自动填充至128字节再进行加密,但php跟java中没有统一的填充标准,所以openssl_encrypt并没有默认填充,openssl_encrypt加密对数据长度有要求,从而导致加密失败,所以需要手动填充。
function aes_encrypt($str,$key){
$str_padded = $str;
if (strlen($str_padded) % 16) {
$str_padded = str_pad($str_padded,strlen($str_padded) + 16 - strlen($str_padded) % 16, "\0");
return bin2hex(openssl_encrypt($str_padded, 'AES-128-CBC',md5($key),OPENSSL_NO_PADDING,substr(md5($key), 0, 16)));
function aes_decrypt($str,$key){
$str = preg_replace( '/[^a-f0-9 ]/i', '', $str);
$str = strlen($str) % 2 ? pack("H*", $str) : hex2bin($str);
return openssl_decrypt($str, 'AES-128-CBC', md5($key),OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,substr(md5($key), 0, 16));
觉得文章有用就打赏一下文章作者
支付宝扫一扫打赏
微信扫一扫打赏
分类推荐文章
PHP的五种运行模式详解
PHP array_intersect()和array_diff()函数
CSS3和jQuery分别实现表格多行交替变色
PHP Non Thread Safe和Thread Safe版本的区别
常用正则表达式
标签推荐文章
PHP冒泡排序算法
PHP函数password_hash
PHP报错“It is not safe to rely on the system’s timezone settings”的解决方法
七牛镜像存储插件for zblog
PHP对图片进行base64编码
目前有 0 条评论