node.js - Nodejs/Golang aes 256解密

标签 node.js go cryptography

我有一个加密的字符串,我可以使用以下代码在 nodejs 中对其进行解密

let decrypt = crypto.createDecipheriv('aes-256-cbc-hmac-sha1', derived, iv);
decrypt.setAutoPadding(false);
let decrypted = decrypt.update(new_buf, 'binary', 'utf8') + decrypt.final('utf8');

我必须能够在 go 程序中解密相同的缓冲区,所以我写了这个

fmt.Printf("buf size=%d\n", len(derivedKey))
block, err := aes.NewCipher(derivedKey)
if err != nil {
    fmt.Printf("%v\n", err)
    return ("0")
}
fmt.Printf("block size=%d\n", block.BlockSize())
cbc := cipher.NewCBCDecrypter(block, ivKey)
fmt.Printf("cbc block size=%d\n", cbc.BlockSize())
decr := make([]byte, len(encr))
cbc.CryptBlocks(decr, []byte(encr))

这是行不通的(我想我不会在这里发帖 :p)但我也注意到当我打印派生 key 的长度时我得到 32 但是当我读取 block.BlockSize() 或cbc.BlockSize() 我得到 16 作为答案,所以我想知道我是否不必设置某些东西,因为它检测我的算法为 aes128 而不是 aes256。

最佳答案

好的,这实际上运行良好, block 大小显示不是问题,它在内部为 aes256 创建了正确的 block ,我的问题是因为发送给我的参数在“encr”变量上添加了填充。但是上面的代码完美运行

关于node.js - Nodejs/Golang aes 256解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49981704/

相关文章:

javascript - 传递给函数时的 Node.js 'undefined' 变量

javascript - 查询对象。 "q"查询不起作用

node.js - 您可以使用 Node.js 8.10 支持的 AWS Lambda 函数向 SNS 主题发布多条消息吗?

reactjs - 部署具有dockerized前端和dockerise后端镜像的应用程序

encryption - Bouncy CaSTLe 中有哪些 "Safe"ECC 曲线可用?

node.js - 在 Node.js 中,如何将 bluebird Promise 与 for 循环一起使用

go - 我如何解决无法引用 golang 中未导出的字段或方法 models.Model.getDevices

go - 如何在Golang Web应用程序中组织Web表单与数据库之间的交互?

cryptography - Java - javax.crypto.Mac 和 javax.crypto.Cipher 之间的区别?

Java 加密 AES 函数