У меня проблема с шифрованием строки. У меня есть команда для шифрования строки с помощью apenssl / des.h (triple-des DES_ede3_cbc_encrypt). Но я хотел узнать, как зашифровать с помощью моего пользовательского ключа в этой функции DES_ede3_cbc_encrypt c ++
Это для шифрования строки в тройном десе с использованием функции DES_ede3_cbc_encrypt на openssl c ++. И я нашел несколько онлайн-кодов, которые мне действительно помогли, но мне нужно знать, как добавить ключи для шифрования с помощью этой функции DES_ede3_cbc_encrypt
#include <iostream>
#include <sstream>
#include <bitset>
#include <vector>
#include <iomanip>
#include <cstring>
#include <openssl/des.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main(int argc, char* argv[])
{
DES_cblock cb1 = { 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE };
DES_cblock cb2 = { 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE };
DES_cblock cb3 = { 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE };
DES_cblock cblock = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
DES_key_schedule ks1,ks2,ks3;
char string[] = "I am a software developer";
// ---------------------------------------------
// I use sizeof instead of strlen because I want
// to count the '\0' at the end, strlen would
// not count it
int stringLen(sizeof(string));
printf("Plain Text : %s\n",string);
char* cipher(new char[32]);
char* text(new char[stringLen]);
memset(cipher,0,32);
memset(text,0,stringLen);
DES_set_odd_parity(&cblock);
if (DES_set_key_checked(&cb1, &ks1) ||
DES_set_key_checked(&cb2, &ks2) ||
DES_set_key_checked(&cb3, &ks3)) {
printf("Key error, exiting ....\n");
return 1;
}
DES_ede3_cbc_encrypt((const unsigned char*)string,
(unsigned char*)cipher,
stringLen, &ks1, &ks2, &ks3,
&cblock, DES_ENCRYPT);
printf("Encrypted : %32.32s\n",cipher);
//-----------------------------------------------
// You need to start with the same cblock value
memset(cblock,0,sizeof(DES_cblock));
DES_set_odd_parity(&cblock);
//-----------------------------------------------
// I think you need to use 32 for the cipher len.
// You can't use strlen(cipher) because if there
// is a 0x00 in the middle of the cipher strlen
// will stop there and the length would be short
DES_ede3_cbc_encrypt((const unsigned char*)cipher,
(unsigned char*)text,
32, &ks1, &ks2, &ks3,
&cblock,DES_DECRYPT);
printf("Decrypted : %s\n",text);
return 0;
}