Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我的md5总是不同,如果我启动了几次程序?_C++_Openssl_Md5 - Fatal编程技术网

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

C++ 为什么我的md5总是不同,如果我启动了几次程序?,c++,openssl,md5,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"

我有一个加密字符串和计算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
应该可以解决这个问题。

后编译代码。我愿意指出,问题在于调用
MD5
时使用
(unsigned char*)&cipher
。。我建议把它改成代码>密码< /COD> > RSAHU:它已经是<代码>无符号char */COD>,所以该模型甚至不需要。@ ChristianHackl,在看到你的答案后注意到。顺便说一下,代码中只有很少的C++。在C++中,您应该使用<代码> STD::String ,并通过诸如“代码> CyString())< /C>函数与C函数进行接口。您可以使用
std::cout
代替
printf
nullptr
代替
NULL
std::ifstream
代替
fopen
。事实上,代码看起来像C,而不是C++。