为什么如果我启动几次程序,我的 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;
}

我的代码有什么问题?

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

最新更新