【发布时间】:2013-01-07 00:25:12
【问题描述】:
所以我正在尝试使用来自 OpenSSL 的 EVP-API 加密一些数据。但我没有收到与测试向量相同的结果。
这是主要功能
#include <stdio.h>
#include <windows.h>
#include <openssl\aes.h>
#include <openssl\evp.h>
int main()
{
unsigned char *to = (unsigned char*)malloc(2056);
ZeroMemory(to,2056);
int *tosize;
unsigned char* key = (unsigned char*)"0000000000000000000000000000000000000000000000000000000000000000";
unsigned char* iv = (unsigned char*)"00000000000000000000000000000000";
unsigned char* plain = (unsigned char*)"00000000000000000000000000000000";
to = AESEncrypt(key,iv,plain,strlen((const char*)plain));
if (to != 0)
{
for (int i = 0; i < strlen((const char*)to);i++)
{
printf("%x02", (int*)UCHAR(to[i]));
}
}
}
这就是我要调用的函数。没有收到错误。每个电话都是真的(没有错误)。
unsigned char* AESEncrypt(unsigned char* key, unsigned char*iv, unsigned char*plain, size_t plainsize)
{
EVP_CIPHER_CTX *x = (EVP_CIPHER_CTX*) malloc(sizeof(EVP_CIPHER_CTX));
EVP_CIPHER_CTX_init(x);
if (EVP_EncryptInit(x,EVP_aes_256_cbc(),key,iv))
{
unsigned char* to = (unsigned char*) malloc(plainsize + EVP_CIPHER_CTX_block_size(x));
int tosize = 0;
if(EVP_EncryptUpdate(x,to,&tosize,plain,plainsize))
{
if (EVP_EncryptFinal(x,to,&tosize))
{
return to;
}
}
}
return 0;
}
这是测试向量:
KEY = 0000000000000000000000000000000000000000000000000000000000000000
IV = 00000000000000000000000000000000
PLAINTEXT = 80000000000000000000000000000000
CIPHERTEXT = ddc6bf790c15760d8d9aeb6f9a75fd4e
这是我收到的: CIPHERTEXT = 5a0215028e .... 它继续。如您所见,这是不正确的。
我做错了什么?
【问题讨论】:
-
你不能改变字符串文字。将您的指针变为指向常量的指针。
-
OT:
to是如何传递到您的加密函数中的?还是只是为了在内存泄漏的范围内进行测试? -
to是输出的位置。 -
这是您第一次使用 CAVS 安全带的牛仔竞技表演吗?只是好奇,因为您的数据不正确。除非有人打败我,否则我会在答案中详细说明原因。
-
是的,这是第一次。