gpt4 book ai didi

c++ - 带随 secret 钥生成的双重 AES 加密

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:57 33 4
gpt4 key购买 nike

我正在使用 2 个嵌入式 GSM 设备。设备之间需要发送数据。假设我需要将字符串“ring”从一台设备发送到另一台设备。它是一个命令,需要多次发送。我做的第一件事是在两个设备中保持 aes_key 相同。然后加密input_data(即“boom”)并获取enc_buffer。通过套接字将此 enc_buffer 发送到其他设备。另一个设备具有相同的 aes_key。使用它我将接收到的缓冲区解密到 dec_buffer 中。我的疑问是,每次我发送“boom”的加密文本时,加密消息 enc_buffer 是否相同。如果相同,那么我需要采用另一种方法。我有一个第一级 aes_key,它是常量。然后我需要生成一个二级 aes_key。加密第二级 aes_key 并通过套接字发送。在接收设备中,使用第一级aes_key解密得到第二级aes_key。储存起来。在第一个设备中,再次使用第二级 aes_key 加密字符串“boom”,通过套接字发送。在第二个设备中,使用第二级 aes_key 解密加密消息以获取文本“boom”。但另一个问题是如何在第一个设备中生成第二级 aes_key。 Linux 中是否存在一些随 secret 钥生成器 API?或者我可以使用随机数生成器 API。我需要一个 10 个字符长度的 key 。为此,我调用随机数生成器 10 次以生成 0-26 之间的数字并将其转换为字符。然后聚集在一起以获得所需的 key 。我正在使用 AES 代码示例,如下所示。粘贴以供引用以上文本。

unsigned char aes_key[]= "asytfuhcilejnco";
unsigned char input_data[]= "Sandeep";
int data_size= strlen((char*)input_data);
int buffer_size = ((int)(data_size/AES_BLOCK_SIZE) + 1)*AES_BLOCK_SIZE;

AES_KEY enc_key,dec_key;
unsigned char iv[AES_BLOCK_SIZE];

int main()
{
unsigned char enc_buffer[buffer_size+1];
unsigned char dec_buffer[buffer_size+1];

memset(iv,0x00,AES_BLOCK_SIZE);
AES_set_encrypt_key(aes_key,sizeof(aes_key)*8,&enc_key);
AES_cbc_encrypt(input_data,enc_buffer,sizeof(input_data),&enc_key,iv,AES_ENCRYPT);
enc_buffer[buffer_size+1]='\0';

memset(iv,0x00,AES_BLOCK_SIZE);
AES_set_decrypt_key(aes_key,sizeof(aes_key)*8,&dec_key);
AES_cbc_encrypt(enc_buffer,dec_buffer,sizeof(input_data),&dec_key,iv,AES_DECRYPT);
dec_buffer[buffer_size+1]='\0';

cout<<"input_data="<<input_data<<endl;
cout<<"enc_buffer="<<enc_buffer<<endl;
cout<<"dec_buffer="<<dec_buffer<<endl;
}

所以,我有 3 个问题

  1. 对于相同的 input_data 和 aes_key,加密数据是否始终相同?
  2. 有随 secret 钥生成器 API 吗?
  3. Linux C++ 中有哪些用于随机数的系统调用?

最佳答案

Is encrypted data always the same for same input_data and aes_key?

没有。对于相同的 key iv数据来说也是一样的。

Is there any random key generator API?

是的,例如 OpenSSL 就有一个。

What systemcall is there for random numbers in Linux c++?

一个“好的”随机数生成器是/dev/urandom。如果可用的话,可以说更好的是/dev/hwrng,但是它是不同的,不一定更好。/dev/random 类似,可能比/dev/urandom 更好,但当没有足够的熵时会阻塞。

在所有情况下,您读取这些设备就像从文件中读取数据一样。

关于c++ - 带随 secret 钥生成的双重 AES 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50496176/

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