void decrypt_cert(mpz_t decrypted_cert, cert_message *cert, mpz_t key_exp, mpz_t key_mod) {
mpz_t certificate;
mpz_init(certificate);
puts(cert->cert); // Prints Hex values i.e 0x98A6C
mpz_set_str(certificate, cert->cert, HEX_BASE);
puts(mpz_get_str(NULL,16,certificate)); // Prints 0
perform_rsa(decrypted_cert, certificate, key_exp, key_mod);
}
在我上面的方法中。第1行puts(cert->cert);
打印cert->cert
的正确值但是当我使用此值设置certificate
并将certificate
转换回字符串puts(mpz_get_str(NULL,16,certificate));
时,会打印出0
}。
我的代码有什么问题吗?
答案 0 :(得分:2)
请参阅documentation。在mpz_set_str
中,要么传递0
的基数(因此它使用0x
来猜测基数),要么省略字符串中的前导0x
。
答案 1 :(得分:2)
mpz_set_str(certificate, cert->cert, HEX_BASE);
如果字符串以0x开头,将无法解析您的字符串。
你要么:
mpz_set_str(certificate, &cert->cert[2], HEX_BASE);
以下是一个小样本程序,您可以通过传入来进行测试。 “0x1234”vs“1234”
#include <gmp.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int rc;
mpz_t certificate;
mpz_init(certificate);
rc = mpz_set_str(certificate, "1234", 16);
printf("mpz_set_str returned %d\n", rc);
puts(mpz_get_str(NULL,16,certificate));
return 0;
}