在我下面附加的代码中,它使用 gcry_cipher_encrypt。在代码的末尾,它将 encBuffer 中的内容输出为十六进制值字符串。我需要在 char[]、char* 或 string 之类的变量中创建它并使用它。
根据gcrypt的手册,encBuffer,函数的第二项应该是一个无符号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;
}