我尝试使用自定义IV进行加密,但它会产生一个密码,其中包含As的填充,如
AAAAAAAAAAAAAAAAAAAAACbglBtdgH3ajX1jgkOaVAsFYyDxRRI=
我按照https://gist.github.com/manishtpatel/8222606的示例实施进行了一些更改。去游乐场跑步和测试https://play.golang.org/p/2rS6zBwbnF
我的代码是在 https://play.golang.org/p/qlx_cU0VPQ
以下是引用的加密函数
func Encrypt(key []byte, text string) string {
// key := []byte(keyText)
plaintext := []byte(text)
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
// The IV needs to be unique, but not secure. Therefore it's common to
// include it at the beginning of the ciphertext.
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := commonIV
stream := cipher.NewCFBEncrypter(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
// convert to base64
return base64.URLEncoding.EncodeToString(ciphertext)
}
答案 0 :(得分:3)
请参阅此示例以了解golang aes加密,如果您不需要专门使用AES CFB,则只需更换加密功能并使用GCM。 TL; DR-Copy&从此链接粘贴您的加密代码而不是Stack Overflow。
https://github.com/gtank/cryptopasta/blob/master/encrypt.go
如果您只是学习观看相关的谈话并阅读链接的代码,如果您实际上正在加密,请使用链接代码。
PS我不是专家,但你的iv应该是随机的,每次不应该吗?要修复上面的代码,您需要使用以下内容复制iv / nonce:copy(ciphertext [:aes.BlockSize],iv [:])
这个想法是唯一的随机nonce是在密文的开头,并且用于解密(所以commonIV不应该存在)这会阻止它为同一个明文产生相同的输出。请注意修复后的代码每次都会产生相同的输出 - 这很糟糕。
但请,不要使用堆栈溢出的人的建议加密,当然不是来自我,请看这里的链接,并注意指示。这个东西太难以通过反复试验来解决。