最近在使用 AEC 加密算法时,遇到了一个棘手的问题 – 将 AEC 加密的数据转为 JSON 时,似乎会导致数据长度丢失的问题。具体表现为,加密后的数据长度为 16 字节,但转化为 JSON 后,长度会变为 13 字节。
经过仔细排查,发现是因为在将加密数据转为字符串之后,未考虑到每个字节的长度,导致了部分数据在转化为 JSON 格式时被缩短了。
//AEC 加密数据转 JSON 格式 const encryptedData = Buffer.from(aecResult,'binary').toString('base64'); const jsonString = JSON.stringify({ data: encryptedData });
以上代码是导致问题的主要原因– `Buffer.from(data,'binary')` 方法将加密的数据转成了一个 Buffer,之后使用 `toString('base64')` 转化为字符串,但这里缺少了长度的描述,导致一些字节被当成不需要转移的特殊字符,导致数据损失。
解决方案十分简单,对于加密后的数据,需要记录每个字节的长度,将加密数据转化为字符串时,才能保证数据不会损失。修改后的代码如下:
const encryptedData = Buffer.from(aecResult,'binary'); const encryptedDataLength = encryptedData.length; const jsonString = JSON.stringify({ data: encryptedData.toString('base64',encryptedDataLength) });
在加密数据转换为字符串时,增加了 `toString('base64',encryptedDataLength)` 这一段代码,其中第二个参数指定了起始位置,第三个参数指定了转化的数据长度,这样就能完整地转化为字符串了。
总之,在使用 AEC 加密算法时,要注意将加密数据转化为字符串时,需要考虑每个字节的长度,否则转化后的数据长度可能会相应减少,而导致数据的丢失。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。