golang一种使用aes gcm解密报错incorrect nonce length given to GCM的解决方案

560 阅读1分钟

最近在尝试使用go写程序,在用到aes gcm解密的过程中,首先参考了示例go.dev/src/crypto/…

使用示例中的加密结果可以正常解密,但是当我修改密文以及iv后运行程序却报错

panic: crypto/cipher: incorrect nonce length given to GCM

网上搜索报错信息找到了源码部分

go.dev/src/crypto/…

​编辑

 图中可以看到报错的原因是由于len(nonce) != g.nonceSize,也就是iv长度导致的问题,同时源码156行内容可以看到iv的默认长度为12

​编辑

 难怪会报错,我这里使用到的iv长度是16的,到这里猜测应该会有设置iv长度的函数,于是翻到了这里

​编辑

于是尝试将示例中 

aesgcm, err := cipher.NewGCM(block)

修改为

aesgcm, err := cipher.NewGCMWithNonceSize(block, 16)

再次运行程序,果然正常了,这里记录一下,遇到相同问题的小伙伴可以参考下