我正在尝试在go API中使用AES加密和解密,我使用aes.NewCipher(mykey)创建了一个新块,该块似乎有效,但是随后当我调用cipher.NewCBCDecrypter(block, iv)该函数在尝试调用b.BlockSize()时,在cbc.go的第26行导致“无效的内存地址或nil指针解除引用”错误。
因此,我尝试从自己的代码中调用block.BlockSize(),并且也得到了异常,但是当我检查块var时,它不是nil。
func Decrypt(data []byte) (result []byte, err error) {
logger := logrus.New()
logger.Infof("Starting decryption for string: %s\n", string(data[:]))
var block cipher.Block
if block, err := aes.NewCipher([]byte(app.Config.AESKey)); (err != nil) || (block == nil) {
logger.Infof("Failed to create block\n")
return nil, err
}
if len(data) < aes.BlockSize {
logger.Infof("Input too short\n")
return nil, nil
}
cbc := cipher.NewCBCDecrypter(block, []byte(app.Config.AESIV))
cbc.CryptBlocks(data, data)
return data, nil
}
由于aes.NewCipher不会返回错误,我希望该功能能够正常工作。
答案 0 :(得分:1)
我现在看到了我的问题,我对go不太熟悉,所以我基本上是在创建2个块变量,一个是函数范围可访问的,而另一个是if语句内唯一可访问的形式。
答案 1 :(得分:0)
删除此行
var block cipher.Block
在下一行初始化块时。
基本上,要创建2个变量。