gpt4 book ai didi

go - 如何使用明文密码加密AES256 CTR?

转载 作者:IT王子 更新时间:2023-10-29 02:31:21 30 4
gpt4 key购买 nike

我正在使用这个 example尝试使用 AES-256 加密数据。但是,当我使用密码 WeakPasswordForTesting 作为输入时,出现错误:crypto/aes: invalid key size。我的印象是它与我的普通密码长度有关。我如何使用此示例代码使用简短的纯文本密码来加密数据?

func Encrypt(password []byte, plainSource []byte) ([]byte, error) {
key, _ := hex.DecodeString(string(password))
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(plainSource))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
stream := cipher.NewCTR(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plainSource)

return ciphertext, nil
}

最佳答案

Advanced Encryption Standard (AES)block cipher它需要一个固定大小的键。 key 长度在密码名称中:AES-256 表示 key 长度为 256 位。

由于您的密码不是符合此规范的 key ,因此您需要实现一个流程才能做到这一点。一种常见的机制是 key 派生函数,它采用熵明显低于所需 key 长度的输入密码,并用各种数据填充它以生成所需长度的 key 。 PBKDF family (基于密码的 key 派生函数)就是一个例子,scrypt 也是。 .


您不应该以这种方式实现一种简单的机制来填充您的输入数据,因为一个好的密码系统的安全性完全取决于 key 的质量,并且任何本土解决方案都不太可能抵抗各种的攻击。<​​/p>

This question关于使用 PBKDF2 对实现建议进行更彻底的评估,在 crypto.SE 上可能会很有趣。

关于go - 如何使用明文密码加密AES256 CTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445930/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com