试了

一、以为格式错误,改格式为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)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐