java小菜一枚 2024-04-22 21:12 采纳率: 89.1%
浏览 3
已结题

crypto加密被截取?

前端和后端使用crypto加密传输信息,但是我发现前端部分加密的时候被截取了很多字符,我也不知道哪里出的问题,麻烦帮我看看,谢谢了。不要机器人

img

img

img


这是代码和加密结果。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-22 21:32
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 根据提供的代码和加密结果,可以看出前端部分使用了CryptoJS进行加密,后端使用了Node.js内置的crypto模块进行解密。由于加解密算法、密钥和加密模式等参数都需要一一对应,因此要先确认加解密算法、密钥和加密模式是否一致。此外,由于前端部分有截断字符的情况,还需要确认前端部分传输的数据是否完整。 解决方案:
    1. 确认加解密算法、密钥和加密模式是否一致 前端部分使用了AES算法、密钥为"abcdefghabcdefgh"、加密模式为CBC,后端部分同样使用了AES算法、密钥为"abcdefghabcdefgh"、加密模式为CBC。可以看出加解密算法、密钥和加密模式都已经匹配。
    2. 确认前端部分传输的数据是否完整 根据提供的加密结果可以看出,前端部分对明文进行了加密,但是结果被截断了,只有24个字符,而加密结果应该是32位的十六进制字符串。因此需要确认前端部分传输的数据是否完整。可以尝试在前端打印出加密后的结果,确认明文和密文是否匹配。
    3. 尝试在后端使用CryptoJS进行解密 可以尝试使用前端部分同样的加密方式,在后端使用CryptoJS进行解密,以确认前端和后端加解密是否一致。具体代码如下:
    const CryptoJS = require('crypto-js');
    const key = 'abcdefghabcdefgh';
    const iv = '1234567890123456';
    const encrypted = '…'; // 填写前端部分加密后的结果
    const decrypted = CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Utf8.parse(key), {
        iv: CryptoJS.enc.Utf8.parse(iv),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    console.log(decrypted);
    

    将代码中的key、iv和encrypted分别替换为前端部分加密中使用的参数,运行代码,根据打印出来的结果,确认明文和密文是否一致。 4. 调试代码 如果以上两项检查均没有问题,可以尝试用调试器调试代码,定位截断字符的原因。可以在前端部分加密的最后一行打印出加密后的结果,查看结果是否完整。可以进一步查看代码中对于加密结果的处理,确认是否存在截断字符的处理。可以不断通过排查和测试,最终定位代码中的问题,找到解决方案。 参考资料: 1. CryptoJS官方文档:https://cryptojs.gitbook.io/docs/ 2. Node.js crypto模块文档:https://nodejs.org/dist/latest-v14.x/docs/api/crypto.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 已采纳回答 5月29日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 adv找不到可向其添加属性的有效项目。
  • ¥15 cesm2.2.0移植问题。./manage_externals/checkout_externals
  • ¥15 ntp对时中的时标问题
  • ¥35 pcb上电后,不一会儿,主控过热烧毁
  • ¥15 ubuntu,windows,文件传输,Linux
  • ¥15 北斗定位,cors,无人机,图传
  • ¥15 Unity热更新框架问题
  • ¥20 如何提交icra的附录.应该在哪里提交
  • ¥20 请教yolov8出现如下bug怎么办
  • ¥30 Armoury Crate 无法打开链接然后卸载了无法安装回去