gpt4 book ai didi

encryption - 如何为AES加密生成随 secret 钥?

转载 作者:行者123 更新时间:2023-12-03 11:45:33 30 4
gpt4 key购买 nike

每当我收到对端点的请求时,我都会使用openssl crate 生成随 secret 钥。我将使用新生成的 key 来加密请求数据,并将其作为响应发送回去。

use openssl::rsa::{Rsa, Padding};
use openssl::aes::{AesKey, aes_ige};
use openssl::symm::Mode;
use openssl::rand::rand_bytes;

let mut buf = [0; 128];
rand_bytes(&mut buf).unwrap();
let aeskey = AesKey::new_encrypt(&buf).unwrap();

当执行 AesKey::new_encrypt方法时,出现以下错误:

thread 'actix-rt:worker:3' panicked at 'called `Result::unwrap()` on an `Err` value: KeyError(())', src/**/**.rs:23:18

我的要求是, key 对于每个请求都必须是随机且唯一的。

编辑1:

谢谢你的回答。现在,我已经更改了大小,现在可以使用AesKey了。

更改后的代码:
    let message = "
{
\"id\": 1,
\"name\": \"xyzab\"
}".to_string();

let mut buf = [0; 16];
rand_bytes(&mut buf).unwrap();
let aeskey = AesKey::new_encrypt(&buf).unwrap();
let mut iv = *b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\
\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
let mut outbuf = [0u8; 16];
aes_ige(message.as_bytes(), &mut outbuf, &aeskey, &mut iv, Mode::Encrypt);

当我执行此操作时,我从aes_ige方法中收到一条错误消息:
'assertion failed: in_.len() == out.len()', /Users/shyamsundarb/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-0.10.29/src/aes.rs:142:9

我尝试增加出水口的大小,但仍然遇到与上述相同的错误。

我浏览了文档,并指出:

Panics if in_ is not the same length as out, if that length is not a multiple of 16, or if iv is not at least 32 bytes.



我不确定自己在做什么错。

编辑2:

感谢您的投入。我能够通过将输入和输出缓冲区的大小调整为16的倍数来解决此问题。

最佳答案

let mut buf = [0; 128];


您将提供一个128字节的缓冲区作为键。

根据有关new_encrypt的文档:

Returns an error if the key is not 128, 192, or 256 bits.



您的 key 太大了4倍,我猜想比您期望的大8倍。

关于encryption - 如何为AES加密生成随 secret 钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61905688/

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