You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用crypto-js实现视频加解密后解密文件无法播放及体积偏大问题

问题原因定位

全流程编码转换逻辑损坏二进制数据

  • 自定义的streamToString函数会把读取到的文件Buffer强制转换为UTF-8字符串。视频文件属于纯二进制格式,不满足UTF-8编码规则,转换过程中所有不合法的字节序列会被替换为固定长度的UTF-8替换字符,直接篡改原始视频的字节结构。这个步骤是解密后文件无法播放、体积明显大于原文件的核心诱因——单字节的非法序列被替换为3字节的替换字符后,累计会造成文件体积明显膨胀。
  • 解密完成后,代码会把解密得到的WordArray格式二进制内容,再次强制转换为UTF-8字符串写入输出文件,在最终输出环节进一步破坏二进制数据的完整性。

密钥与初始向量(IV)不符合AES算法要求

  • 代码中作为密钥、IV使用的字符串长度为22,既不符合合法Base64字符串的格式要求(合法Base64字符串长度必须为4的倍数),又直接通过CryptoJS.enc.Base64.parse()解析,最终得到的密钥、IV长度无法满足AES算法的硬性约束(AES要求密钥长度为16/24/32字节,IV固定为16字节)。
  • 这种场景下CryptoJS会自动对长度不足的密钥、IV做补全处理,实际生效的加密/解密密钥和预期完全不一致,即便编码流程没有错误,解密结果也会是无效乱码。

数据流转载体选择错误

  • 对二进制文件做AES加解密时,全程不能以字符串作为数据流转的载体,必须直接以Buffer类型处理原始字节流,避免任何无意义的编码转换造成的字节损坏。

内容的提问来源于stack exchange,提问作者CodeDezk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 04:45:03