c ++ 11 — C ++, как скопировать возвращаемое значение gcry_cipher_encrypt из библиотеки gcrypt в переменную?

В коде, который я прикрепил ниже, он использует gcry_cipher_encrypt. В конце кода он выводит содержимое в encBuffer в виде строки шестнадцатеричного значения. Мне нужно сделать это в переменной, как char [], char * или string, как угодно и использовать его.

Согласно справочнику gcrypt, encBuffer, вторым элементом функции должна быть переменная типа unsigned char *. Это должно указывать на массив без знака, я считаю. Но, когда я делаю:

for(int i = 0; i < txtLength-1;i++){
cout<<encBuffer[i];
}

Я получаю массовый код. Как я могу получить читаемый контент из encBuffer, пожалуйста? Большое спасибо.

#include <stdio.h>
#include <gcrypt.h>

int main () {
gcry_error_t     gcryError;
gcry_cipher_hd_t gcryCipherHd;
size_t           index;
char * salsaKey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // 32 bytes
char * iniVector = "AAAAAAAA"; // 8 bytes

gcryError = gcry_cipher_open(
&gcryCipherHd, // gcry_cipher_hd_t *
GCRY_CIPHER_SALSA20,   // int
GCRY_CIPHER_MODE_STREAM,   // int
0);            // unsigned int
if (gcryError)
{
printf("gcry_cipher_open failed:  %s/%s\n",
gcry_strsource(gcryError),
gcry_strerror(gcryError));
return;
}
printf("gcry_cipher_open worked\n");

gcryError = gcry_cipher_setkey(gcryCipherHd, salsaKey, 32);
if (gcryError)
{
printf("gcry_cipher_setkey failed:  %s/%s\n",
gcry_strsource(gcryError),
gcry_strerror(gcryError));
return;
}
printf("gcry_cipher_setkey worked\n");

gcryError = gcry_cipher_setiv(gcryCipherHd, iniVector, 8);
if (gcryError)
{
printf("gcry_cipher_setiv failed:  %s/%s\n",
gcry_strsource(gcryError),
gcry_strerror(gcryError));
return;
}
printf("gcry_cipher_setiv worked\n");

size_t txtLength = 101;
char * encBuffer = malloc(txtLength);
char * textBuffer = malloc(txtLength);
memset(textBuffer, 0, 101);

gcryError = gcry_cipher_encrypt(
gcryCipherHd, // gcry_cipher_hd_t
encBuffer,    // void *
txtLength,    // size_t
textBuffer,    // const void *
txtLength);   // size_t
if (gcryError)
{
printf("gcry_cipher_decrypt failed:  %s/%s\n",
gcry_strsource(gcryError),
gcry_strerror(gcryError));
return;
}
printf("gcry_cipher_decrypt worked\n");

printf("encBuffer = ");
for (index = 0; index<txtLength-1; index++)
printf("%02X", (unsigned char)encBuffer[index]);
printf("\n");
return 0;
}

0

Решение

Я сделал следующую функцию, используя malloc (потому что ваш код делает).

char *buffer2hex(char *encBuffer, int txtLength){
char *encHexText = (char *)malloc(txtLength*2+1),
*eht = encHexText;
for (int i = 0; i < txtLength; i++){
int c = (unsigned char)encBuffer[i];
#define tohex(n) ((n)>9?(n)-10+'A':(n)+'0')
*eht++ = tohex(c>>4);
*eht++ = tohex(c&0xf);
#undef tohex
}
*eht = '\0';
return encHexText;
}

В конце вашего метода вы можете назвать его так:

    char *hex = buffer2hex(encBuffer, txtLength);
printf("%s\n", hex); // Use it
free(hex);           // and free it!
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]