首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aes_gcm_siv 32字节密钥要求的解决方法?

aes_gcm_siv 32字节密钥要求的解决方法?
EN

Stack Overflow用户
提问于 2021-03-21 16:07:14
回答 1查看 91关注 0票数 0

使用不是32字节的任何密码都会使程序死机,出现以下错误:

代码语言:javascript
复制
thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `4`,
 right: `32`'

简单的解决方案似乎要么用零填充它,要么将密码从0修剪到31,但为什么呢?我怀疑它有任何安全隐患,因为它不允许您使用超过32个字节。除了前面提到的简单解决方案之外,是否有其他解决方案可以让用户拥有更长的密码,而不是重写机箱?

以下是我的上下文代码片段:

代码语言:javascript
复制
use aes_gcm_siv::Aes256GcmSiv;
use aes_gcm_siv::aead::{Aead, NewAead, generic_array::GenericArray};

fn encrypt_file(pass: &str, file: &str) {
    println!("{}", pass);
    let key = GenericArray::from_slice(pass.as_bytes());
    let cipher = Aes256GcmSiv::new(&key);
    //...
}

我不喜欢https://docs.rs/aes-gcm-siv/0.9.0/aes_gcm_siv/中给出的用法示例。使用32字符长的硬编码密钥似乎很有欺骗性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 17:23:56

您的部分问题是您直接使用密码作为密钥。你不会想这么做的。AES需要128位、192位或256位密钥,理想情况下,您希望它与随机密钥无法区分,而密码通常不能与随机密钥区分。

如果您有一个低熵的秘密,那么您可能想要使用Argon2id之类的东西来获取密码短语和足够长度的随机盐来派生密钥。如果你有一个具有很多熵的强秘密,那么你可以使用像HKDF这样的东西来生成密钥。如果你做了这两件事中的任何一件,你都可以生成一个32字节长的密钥,如果你愿意的话,还可以生成一个用于加密的随机随机数。由于您使用的是AES-GCM-SIV,因此您也可以使用随机随机数并以这种方式派生密钥。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66730085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档