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

标签 go cryptography aes

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

所以我尝试从我自己的代码中调用 block.BlockSize() 并且我也得到了一个异常,但是当我检查 block 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 不会返回错误。

最佳答案

我现在明白我的问题了,我对 go 不是很熟悉,所以我基本上是在创建 2 个 block 变量,一个是函数范围内可访问的,一个是 if 语句中唯一可访问的形式。

关于go - aes.NewCipher 返回一个有效 block ,但调用 block.BlockSize() 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492518/

相关文章:

go - 如果文档中没有,Go 类型 ExitError 在包 os/exec 中如何支持 Sys() 方法?

c# - RSA解密公式的问题

java - 在代码中解密 AES 加密的授权 token 方法时 Jar 崩溃。 hs_err _pid 文件提到 arrayof_jbyte_fill

java - Java 中使用任意长度密码的 AES 加密

c# - 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

c++ - Crypto++ AES 与标准 fips197 不匹配

go - 了解 gometalinter unconvert 不必要的转换警告

unix - 如何使用管道在 Go 中写入 `cat`

reference - 为什么要在 go 中分配对结构的引用?

javascript - 使用来自 Web 的 USB token 的数字签名