首页 > 解决方案 > aes.NewCipher 返回一个有效的块,但调用 block.BlockSize() 时出现错误

问题描述

我试图让 AES 加密和解密在我的 go API 中工作,我使用 aes.NewCipher(mykey) 创建一个新块,该块似乎是有效的,但是当我调用 cipher.NewCB​​CDecrypter(block, iv)当函数尝试调用 b.BlockSize() 时,函数会在 cbc.go 的第 26 行导致“无效的内存地址或 nil 指针取消引用”错误。

所以我尝试从我自己的代码中调用 block.BlockSize() 并且我也得到了一个异常,但是当我检查块变量时它不是零。

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 不会返回错误。

标签: gocryptographyaes

解决方案


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


推荐阅读