Я использую 2 встроенных GSM-устройства.Там необходимо передавать данные между устройствами.Предположим, мне требуется отправить строку «кольцо» с одного устройства на другое.Это команда, которую нужно отправить несколько раз.Первое, что я делаю, это держу aes_key одинаковым на обоих устройствах.Затем зашифруйте input_data (то есть "boom") и получите enc_buffer.Отправьте этот enc_buffer через сокет на другое устройство.У другого устройства такой же aes_key.Используя это, я расшифровываю полученный буфер в dec_buffer.Я сомневаюсь, что зашифрованное сообщение enc_buffer будет одинаковым каждый раз, когда я отправляю зашифрованный текст для «boom».Если это так, то мне нужно следовать другому подходу.У меня есть 1-й уровень aes_key, который является постоянным.Затем мне нужно сгенерировать 2-й уровень aes_key.Зашифруйте 2-й уровень aes_key и отправьте его через сокет.В приемном устройстве расшифруйте его, используя aes_key 1-го уровня, чтобы получить aes_key 2-го уровня.Сохраните это.В 1-м устройстве снова зашифруйте строку «boom», используя aes_key 2-го уровня, отправьте ее через сокет.Во 2-м устройстве расшифруйте зашифрованное сообщение, используя aes_key 2-го уровня, чтобы получить текст «бум».Но другая проблема заключается в том, как создать aes_key 2-го уровня в 1-м устройстве.Есть ли какой-нибудь API генератора случайных ключей в Linux.Или я могу использовать API генератора случайных чисел.Мне нужен ключ длиной 10 символов.Для этого я вызываю генератор случайных чисел 10 раз, чтобы сгенерировать число от 0 до 26 и преобразовать его в символ.Затем соберите вместе, чтобы получить нужный ключ.Я использую пример кода 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 вопроса
- Зашифрованные данные всегда одинаковы для одинаковых input_data и aes_key?
- есть какой-нибудь API генератора случайных ключей?
- Какой системный вызов существует для случайных чисел в Linux c ++?