前端js使用crypto-js进行aes解密,解密内容为空

发布于 2022-09-12 23:22:53 字数 780 浏览 23 评论 0

var key = '6f4ff1fc2b53b9ee'
var iv = 'jskey_1618823712'
var str = 'ubgW0ZKHPho5zjE1VMsEGg=='

 getDAesString(k,i,str) {                                             
                        var key = CryptoJS.enc.Utf8.parse(k); // 秘钥
                        var iv = CryptoJS.enc.Utf8.parse(i); //向量iv
                        var decrypted = CryptoJS.AES.decrypt(str , key, {
                            iv:iv,
                            mode:CryptoJS.mode.CBC,
                            padding:CryptoJS.pad.Pkcs7
                        });
                        return decrypted.toString(CryptoJS.enc.Utf8);
                    },
                    
    this.getDAesString(key,iv,str)

使用crypto-js进行aes解密,解密内容总是为空,找了好几篇文章,看大家都是这么写的,是我哪里写错了吗?

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

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

发布评论

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

评论(2

各自安好 2022-09-19 23:22:53

你首先要确定这段base64是一个aes加密的字符串, 其次, 你要把原数据发出来。要不然,天知道错在哪。
把原始数据用这个密钥和iv用aes cbc加密一次, 对比这个base64看看。

我不是你的备胎 2022-09-19 23:22:53

给你个例子,Node.js 15 亲测通过

import CryptoJS from "crypto-js";

const key = "6f4ff1fc2b53b9ee";
const iv = "jskey_1618823712";

function encrypt(k, i, text) {
    const key = CryptoJS.enc.Utf8.parse(k);
    const iv = CryptoJS.enc.Utf8.parse(i);
    const encrypted = CryptoJS.AES.encrypt(text, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
}

function decrypt(k, i, base64) {
    const key = CryptoJS.enc.Utf8.parse(k);
    const iv = CryptoJS.enc.Utf8.parse(i);
    const encrypted = CryptoJS.AES.decrypt(base64, key, {
        iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString(CryptoJS.enc.Utf8);
}

const x = encrypt(key, iv, "helloworld你好");
console.log(x);
console.log(decrypt(key, iv, x));
Yj3EjgTOiwVU6BB70xvd6PbsbNIAhk29EbyFuR62gYE=
helloworld你好

至于你遇到的问题,需要从几个方面去分析

  1. keyiv 是不是跟加密时用的完全相同?
  2. keyiv 在加密的时候是不是也是用的 CryptoJS.enc.Utf8.parse()
  3. 加密时的 mode 是不是也是 CryptoJS.mode.CBC
  4. 加密时的 padding 是不是同样的 CryptoJS.pad.Pkcs7
  5. str 是不是通过加密结果的 ciphertext 属性编码的结果

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

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