javascript - 在 Go 中编码 AES,在 CryptoJS 中解码

标签 javascript go cryptojs

我在 Go 中有这些:

var commonIV = []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
plaintext := []byte("hello, world")
key_text := "32o4908go293hohg98fh40gh"
c, err := aes.NewCipher([]byte(key_text))
if err != nil {
    fmt.Printf("Error: NewCipher(%d bytes) = %s", len(key_text), err)
    return
}
cfbdec := cipher.CBCEncrypter(c, commonIV)
ciphertext := make([]byte, len(plaintext))
cfbdec.CryptBlock(ciphertext, plaintext)
fmt.Printf("%x", ciphertext) //HEX

输出:

e0df84c3b83681a8133e1787

然后我导入以下网址:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/mode-cfb-min.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/components/pad-nopadding.js"></script>

我的 JS 代码如下:

var data = CryptoJS.enc.Hex.parse("e0df84c3b83681a8133e1787");
console.log(data);
var key = "32o4908go293hohg98fh40gh";
var iv = CryptoJS.enc.Base64.parse("AAAAAAAAAAAAAAAAAAAAAA==");
console.log(iv);

var encrypted = {};
encrypted.key=key;
encrypted.iv=iv;
encrypted.ciphertext = data;

var dec = CryptoJS.AES.decrypt(encrypted, key, { mode: CryptoJS.mode.CFB, iv: iv,  padding: CryptoJS.pad.NoPadding  });

console.log(dec);
console.log(dec.toString());
console.log(dec.toString(CryptoJS.enc.Utf8));

我做错了什么?

最佳答案

看起来您在 Go 中使用的是 CBCEncrypter( block 计数器模式),但在 JS 代码中使用的是 CryptoJS.mode.CFB(密码反馈模式)。据我所知,这些不是兼容的 block 模式。

关于javascript - 在 Go 中编码 AES,在 CryptoJS 中解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145521/

相关文章:

javascript - 如何从日期数组中获取平均时间?

javascript - 每当单击某些内容时使用 jquery 删除 iframe

javascript - throw er;//未处理的 'error'事件-NodeJS

testing - 我应该如何使用 gorilla 上下文对中间件包进行单元测试

testing - 在不使用 golang 详细模式的情况下,如何在使用 go test 时始终打印消息,无论成功还是失败?

javascript - crypto-js 函数返回什么样的数据?

javascript - 我如何遍历在 javascript 中使用 getter 的对象

go - ParseInt 不转换为所需的类型

node.js - 使用 Nodejs (Crypto) 加密文件会引发错误 : bad base64 decode

node.js - 使用模块 'crypto' 对十六进制数据进行 NodeJS DES ECB 加密