static char* test_encrypt_ecb_verbose(char* plain_text_char, char* key_char)
{
uint8_t i,j, buf[64];
uint8_t plain_text[64];
uint8_t* outstr;
outstr = '\0';
memcpy(key,key_char,16) ;
memcpy(plain_text, plain_text_char, 64);
memset(buf, 0, 64);
printf("ECB encrypt verbose:\n\n");
printf("plain text:\n");
for(i = (uint8_t) 0; i < (uint8_t) 4; ++i)
{
phex(plain_text + i * (uint8_t) 16);
}
printf("\n");
printf("key:\n");
phex(key);
printf("\n");
// print the resulting cipher as 4 x 16 byte strings
printf("ciphertext:\n");
for(i = 0; i < 4; ++i)
{
AES128_ECB_encrypt(plain_text + (i*16), key, buf+(i*16));
phex(buf + (i*16));
//function to encrypt
}
printf("decryptedtext:\n");
for (i = 0; i < 4; ++i)
{
AES128_ECB_decrypt(buf + (i * 16), key, plain_text + (i * 16));
phex(plain_text + (i * 16));
//function to decrypt
}
//memcpy(outstr, buf, 64);
for (i = 0; i < 4; i++)
{
for (j = 0; j < 16; j++)
{
outstr[j] = buf + (i * 16);
}
}
在上面的代码片段中,我希望将加密后的输出数组作为字符串返回。我的两次尝试都在最后。但那些不正确。任何人都可以建议正确的方法吗?
答案 0 :(得分:0)
char数组和char指针不是一回事。
如果您需要更多详细信息,请参阅this post
它将为您提供从char数组中获取char *
的解决方案
char* p = &a[0];
a是你的char数组,是你的目标指针
然后返回你的指针。使用您的代码,您还可以直接使用您获得的char *
作为函数参数
答案 1 :(得分:0)
要取回它,你应该添加一个额外的参数:
static void test_encrypt_ecb_verbose(char* plain_text_char, char* key_char, char** cipher_text_char)
{
... your function ...
*cipher_text_char = malloc(64);
memcpy(*cipher_text_char, buf, 64);
}
来自你的来电者
char* cipher_text_char = NULL;
test_encrypt_ecb_verbose(plain_text_char, key_char, &cipher_text_char);
执行test_encrypt_ecb_verbose后,cipher_text_char将指向函数内部分配的内存。
作为一个例子考虑一下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* myfunc(char* src, char** dst, int len)
{
*dst = (char*)malloc(len);
memcpy(*dst, src, len);
return *dst;
}
int main(int argc, char* argv[])
{
char* src = "MyFuncTest";
char* dst = NULL;
char* p = NULL;
p = myfunc(src, &dst, strlen(src) + 1);
printf("dst = %s\n", dst);
printf("p = %s\n", p);
return 0;
}
输出结果为:
dst = MyFuncTest
p = MyFuncTest