我有一个加密字符串和计算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;
}
我的代码出了什么问题?
答案 0 :(得分:4)
这里发生了许多丑陋的演员,但看起来问题在于你获取本地指针对象cipher
的地址而不是使用它所指向的内容。使用cipher
代替(unsigned char*)&cipher
应该可以解决这个问题。