У меня есть программа, которая шифрует строку и вычисляет md5, но если я запускаю программу несколько раз, она выводит разные результаты. Моя программа прочитала ключ из того же файла.
int main(int argc, char* argv[])
{
FILE* f;
f = fopen(argv[1], "r");
RSA *private_key = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL);
unsigned char sourceText[] = "source_string";
unsigned char *cipher =(unsigned char*) OPENSSL_malloc(RSA_size(private_key));
int ret = RSA_private_encrypt(strlen((char*)text), text, cipher, private_key, RSA_PKCS1_PADDING);
unsigned char md5Result[MD5_DIGEST_LENGTH];
MD5((unsigned char*)&cipher, strlen((char*) cipher), (unsigned char*)&md5Result);
printf("md5 %s \n", BN_bn2hex(BN_bin2bn(md5Result, MD5_DIGEST_LENGTH, NULL)));
return 0;
}
Что не так с моим кодом?
Здесь происходит много уродливого приведения, но похоже, что проблема в том, что вы берете адрес объекта локального указателя. cipher
вместо того, чтобы использовать то, на что он указывает. С помощью cipher
вместо (unsigned char*)&cipher
должен это исправить.
Других решений пока нет …