AES解密报错:Malformed UTF-8 data(主流方法总结)

试了

一、以为格式错误,改格式为UTF-8

先在前端转,比较麻烦。就在后端转。

但下图代码里的mb_detect_encoding还存在字符串较短时判断不准的情况,最后也不折腾了。因为将原文参数用json.encode转字符串后返回的就是UFT-8格式的数据,加密也不至于改格式。而且前端Nginx服务器配置里也加了charset UTF-8;

function str_to_utf8 ($str = '') {
    $current_encode = mb_detect_encoding($str, array("ASCII","GB2312","GBK",'BIG5','UTF-8')); 
    $encoded_str = mb_convert_encoding($str, 'UTF-8', $current_encode);
    return $encoded_str;
}

(12条消息) php将任意编码的内容转换成utf-8_php字符转码_Rudon滨海渔村的博客-CSDN博客

二、去掉密文的换行符

(19条消息) 项目部署到linx下时,前端AES解密报Malformed UTF-8 data_qq_39196385的博客-CSDN博客

三、加密和解密的key 不一样

(19条消息) encrypt 解密报错 Malformed UTF-8 data_uncaught error: malformed utf-8 data_Memory_bellwether的博客-CSDN博客

四、用Base64加解密

我后端本来就在AES加密后,又用Base64加密了。后端去掉Base64加密后就报跟前端一样的Malformed UTF-8 data错误。

前端倒是本来没有Base64解密,但加上后仍然报同样的错。

五、更改密钥为32位

AES 有三种算法,主要是对数据块的大小存在区别:

AES-128:需要提供 16 位的密钥
AES-192:需要提供 24 位的密钥
AES-256:需要提供 32 位的密钥

我发现我用的256,但密钥很短,百度了一个AES密钥在线生成器,新密钥换上后问题解决。

并且虽然后端用了Base64加密,但我前端用的AES解密插件自带Base64解密,所以搞定。

PHP使用OpenSSL实现AES加密的笔记 - 景北斗 - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值