aes.NewCipher返回一个有效的块,但调用block.BlockSize()时出现错误

时间:2019-02-02 11:17:18

标签: go cryptography aes

我正在尝试在go API中使用AES加密和解密,我使用aes.NewCipher(mykey)创建了一个新块,该块似乎有效,但是随后当我调用cipher.NewCB​​CDecrypter(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不会返回错误,我希望该功能能够正常工作。

2 个答案:

答案 0 :(得分:1)

我现在看到了我的问题,我对go不太熟悉,所以我基本上是在创建2个块变量,一个是函数范围可访问的,而另一个是if语句内唯一可访问的形式。

答案 1 :(得分:0)

删除此行

var block cipher.Block

在下一行初始化块时。

基本上,要创建2个变量。