doumengxue7371
2018-04-23 12:57
浏览 305
已采纳

Node.js / Golang AES 256解密

I have an encrypted string that I was able to decrypt in nodejs using the following code

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');

I have to be able to decrypt the same buffer in a go program and I wrote this

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

This isn't working (I suppose I won't be posting here otherwise :p) but I also noticed that when I print the length of the derived key I get 32 but when I read the block.BlockSize() or the cbc.BlockSize() I get 16 as an answer so I'm wondering if I don't have to setup something because it is detecting my algorithm as aes128 instead of aes256.

图片转代码服务由CSDN问答提供 功能建议

我有一个加密的字符串,可以使用以下代码在nodejs中解密 \ n

  let解密= crypto.createDecipheriv('aes-256-cbc-hmac-sha1',派生,iv); 
decrypt.setAutoPadding(false); 
let解密= crypto.update(new_buf,' 二进制','utf8')+ crypto.final('utf8'); 
   
 
 

我必须能够在go程序中解密相同的缓冲区,而我

  fmt.Printf(“ buf size =%d 
”,len(derivedKey))
block,err:= aes.NewCipher(derivedKey)
if写道 != nil {
 fmt.Printf(“%v 
”,err)
返回(“ 0”)
} 
fmt.Printf(“ block size =%d 
”,block.BlockSize()  )
cbc:= cipher.NewCB​​CDecrypter(block,ivKey)
fmt.Printf(“ cbc block size =%d 
”,cbc.BlockSize())
decr:= make([] byte,len(encr))  
cbc.CryptBlocks(decr,[] byte(encr))
   
 
 

这是行不通的(我想我不会在这里发布过:p) 但是我还注意到,当我打印派生密钥的长度时,我得到3 2,但是当我阅读block.BlockSize()或cbc.BlockSize()时,我得到16作为答案,所以我想知道是否不必设置某些内容,因为它检测到的算法是aes128而不是aes256。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • drxkx6149 2018-04-23 13:44
    已采纳

    Ok this is working well actually, the blocksize show isn't a problem, internally it creates the correct block for the aes256, my problem was because of the parameters sent to me that added padding on the "encr" variable. But the code on top works perfectly

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题