如果我几次启动程序,为什么我的md5总是不同?

时间:2017-11-08 18:18:15

标签: c++ openssl md5

我有一个加密字符串和计算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;
}

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:4)

这里发生了许多丑陋的演员,但看起来问题在于你获取本地指针对象cipher的地址而不是使用它所指向的内容。使用cipher代替(unsigned char*)&cipher应该可以解决这个问题。

相关问题