C++ 为什么我的md5总是不同,如果我启动了几次程序?
我有一个加密字符串和计算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"
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++。