CryptoJS库DES解密问题

发布于 2022-09-01 20:53:27 字数 602 浏览 21 评论 0

后端对手机号码进行des加密(java实现),再用base64进行编码返回给前端;
前端使用CryptoJS库进行base64解码,再用DES解密,但解密出来的结果是手机号码的后三位,为什么会出现这种结果?有经验的麻烦给指导下

     var key = '12345678';
     var iv= [1,1,1,1,1,1,1,1]; 
     function decryptByDES(ciphertext, key,iv) {
        ciphertext = CryptoJS.enc.Base64.parse(ciphertext);
        var keyHex = CryptoJS.enc.Utf8.parse(key);
        var decrypted = CryptoJS.DES.decrypt(ciphertext, key, {
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7,
            iv: iv
        });
        return decrypted.toString(CryptoJS.enc.Utf8);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2022-09-08 20:53:27

猜测应该是后端Java代码中DES加密的问题,看不到代码只能猜了。
看密钥的长度应该是单倍DES算法,分块为8字节,手机号码11字节,分块为8、3,既然你只能收到手机号码的后三位,那可能就是后端分块加密完之后没有拼接,而是直接把最后一块当成结果返回了。

根据题主的回复,应该是最后的转码的问题。decrypted应该是一个bytes数组,对bytes数组直接解码的话会导致非法的ascii字符被丢弃。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文