我有一个加密的字符串,我可以使用以下代码在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)但我也注意到,当我打印派生键的长度时,我得到32但是当我读到块时。 BlockSize()或cbc.BlockSize()我得到16作为答案,所以我想知道我是不是必须设置一些东西,因为它检测我的算法是aes128而不是aes256。
答案 0 :(得分:1)
好吧这实际上运行得很好,块大小显示不是问题,在内部它为aes256创建了正确的块,我的问题是因为发送给我的参数在“encr”变量上添加了填充。但顶部的代码完美无缺