当前位置: 首页 > 知识库问答 >
问题:

Golang AES-CBC 256使用CryptoJ解密

白弘伟
2023-03-14

一定有人知道,在网上没有任何一个工作的例子...

//golang

    if a == "test64bytes" {
        output = "AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD"
    }
    // encrypt ajax response
    iv := decodeBase64("AAAAAAAAAAAAAAAAAAAAAA==")
    ciphertext := []byte(output)
    ckey := decodeBase64(string(PLAINkey[0:32]))

    c, err := aes.NewCipher(ckey)
    cfbdec := cipher.NewCBCDecrypter(c, iv)
    plaintext := make([]byte, len(ciphertext))
    cfbdec.CryptBlocks(plaintext, ciphertext)
    crypt := string(encodeBase64(plaintext))
    fmt.Fprintf(res, "%v", crypt)

    fmt.Println(encodeBase64(ckey))
    fmt.Println(encodeBase64(iv))
    fmt.Println(crypt)

// javascript

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                        var enc = {};
                        enc["key"] = CryptoJS.enc.Base64.parse(keyseed.substring(0,32));
                        enc["iv"] = CryptoJS.enc.Base64.parse("AAAAAAAAAAAAAAAAAAAAAA==");
                        enc["ciphertext"] = CryptoJS.enc.Base64.parse(xmlhttp.responseText);
                        enc["salt"] = "";
                        console.log("RESPONSE:", xmlhttp.responseText, atob(xmlhttp.responseText));
                                      // check i'm using same data
                        console.log(CryptoJS.enc.Base64.stringify(enc["key"]));
                        console.log(CryptoJS.enc.Base64.stringify(enc["iv"]));
                        console.log(CryptoJS.enc.Base64.stringify(enc["ciphertext"]));
                        var options = { keySize: 256 / 8, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: enc["iv"] };
                        de = CryptoJS.AES.decrypt(enc, enc["key"], options);
                        document.getElementById(target).innerHTML = de.toString();
                        console.log(de.toString(CryptoJS.enc.Utf8));
                        console.log("DECRYPTION FINISHED");
                    }

共有1个答案

孙朗
2023-03-14

在有条不紊地尝试了所有可能的AES配置之后,我现在可以解密我的文本了。

...在本例中使用空白iv(“AAAAAAAAAAAAAAAAAAAAAAAAAAAAA==”)。如果你使用不同的一个,它将成为加密时的第一块明文...

Go>加密

plaintext := []byte("THIS NEEDS TO BE MULTIPLE OF BLOCK LENGTH (16) I THINK")
// encrypt ajax response
iv := decodeBase64("AAAAAAAAAAAAAAAAAAAAAA==")
ckey := decodeBase64(string(PLAINkey[0:32]))

c, err := aes.NewCipher(ckey)
cfbdec := cipher.NewCBCEncrypter(c, iv)
ciphertext := make([]byte, len(plaintext))
cfbdec.CryptBlocks(ciphertext, plaintext)
crypt := string(encodeBase64(ciphertext))
fmt.Fprintf(res, "%v", crypt)
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var symkey = keyseed.substring(0,32);
    var cipherParams = CryptoJS.lib.CipherParams.create({ ciphertext: CryptoJS.enc.Base64.parse(xmlhttp.responseText) });
    var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.NoPadding, iv: CryptoJS.enc.Base64.parse("AAAAAAAAAAAAAAAAAAAAAA==") };
    de = CryptoJS.AES.decrypt(cipherParams, CryptoJS.enc.Base64.parse(symkey), options);
    document.getElementById(target).innerHTML = de.toString(CryptoJS.enc.Utf8);
    console.log("DECRYPTION FINISHED");
}
 类似资料:
  • 我需要在iPhone或iPad上加密字符串(实际上是XML文件),然后用.NET应用程序解密。感谢David Veksler在这里提出的问题“.NET和iPhone之间的AES互操作性?”,以及在这里发表的博客文章http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iPhone/。

  • 我有一个非常大的压缩文件,2.5GB,是加密的。我无法将整个文件解密到内存中,并在那里解压缩以进行生产。所以我试图使用流来限制内存的使用量。 为了做到这一点,我已经连接了以下内容(为了清晰起见,忽略了错误处理和流关闭):

  • 问题内容: 我正在使用spnego(http://spnego.sourceforge.net)在JBoss下进行kerberos身份验证。 我需要解密kerberos票证才能访问包含PAC数据的授权数据。需要PAC数据来决定要授予用户哪些角色。 如何访问和解密kerberos票?我在网上搜索了示例,但没有任何努力。 问题答案: 这些家伙具有完整的PAC解码实现: http://jaasloung

  • 作为一个自学练习,我正在尝试学习如何使用一些pycrypto库。我需要使用AES在CBC_模式下解密密文字符串。I密文、密钥和IV都已给出。以下是我编写的代码: 当我运行这个,我得到以下错误: ValueError:IV的长度必须为16字节 我知道IV字符串是32个十六进制字符,因此是16个字节。我认为这可能是一个打字问题,但我不知道如何纠正它。有人能帮忙吗? 非常感谢。

  • 我对Groovy还比较陌生,我正试着去了解Gradle。如果我导入组织。jvnet。哈德逊。通过Grapes插件,它可以完美地工作,并且解决了依赖关系。但是,如果我尝试使用Gradle检索依赖关系,则依赖关系不会得到解决。 包适用于Gradle和Grape。 未使用Gradle解决的依赖关系 使用Grape解决的依赖关系 使用Gradle解决的依赖项 Gradle构建过程中的错误 build.gr

  • 本文向大家介绍RecyclerView使用详解,包括了RecyclerView使用详解的使用技巧和注意事项,需要的朋友参考一下 RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出。官方对于它的介绍则是:Recycler