为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
人到中年有点甜 2023-06-05 17:05:46
我正在尝试在我的 go API 中使用 AES 加密和解密,我使用 aes.NewCipher(mykey) 创建了一个新块并且该块似乎有效,但是当我调用 cipher.NewCBCDecrypter(block, iv) 时函数在尝试调用 b.BlockSize() 时在 cbc.go 的第 26 行导致“无效内存地址或 nil 指针取消引用”错误。所以我尝试从我自己的代码中调用 block.BlockSize() 并且我也得到一个异常,但是当我检查块 var 时它不是零。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 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

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



查看完整回答
反对 回复 2023-06-05
?
皈依舞

TA贡献1851条经验 获得超3个赞

删除此行

var block cipher.Block

当您在下一行中初始化块时。

本质上,您正在创建 2 个块变量。


查看完整回答
反对 回复 2023-06-05
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信