Golang加密密文在开头有填充As

时间:2017-03-13 19:49:37

标签: encryption go

我尝试使用自定义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)
}

1 个答案:

答案 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不应该存在)这会阻止它为同一个明文产生相同的输出。请注意修复后的代码每次都会产生相同的输出 - 这很糟糕。

,不要使用堆栈溢出的人的建议加密,当然不是来自我,请看这里的链接,并注意指示。这个东西太难以通过反复试验来解决。