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 不一样
四、用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解密,所以搞定。
更多推荐
已为社区贡献2条内容
所有评论(0)