反模数上的 GMP 段错误
GMP Segfault on Inverse modulus
我正在尝试用 C++ 编写一个简单的程序来演示 RSA 背后的数学原理。我正在使用 GMP 库 ( https://gmplib.org/ ),以便以后可以使用更大的素数对其进行扩展。
当我尝试计算解密指数 D 作为 e mod phi(n) 的 modular 逆时,它会出现段错误,我不知道为什么。
任何人都可以阐明这个问题吗?
#include <gmp.h> // For the GMP library
int main()
{
mpz_t n,p,q,e,c,d,h;
mpz_init(n);
mpz_init(h);
mpz_init_set_str(e, "65537", 10);
mpz_init_set_str(p, "1298849", 10);
mpz_init_set_str(q, "1298863", 10);
mpz_mul(n,p,q);
mpz_sub_ui(p, p, 1UL);
mpz_sub_ui(q, q, 1UL);
mpz_mul(h, p, q);
gmp_printf ("%Zd\n", h);
//This next line segfaults it.
mpz_invert(d,e,h);
return 0;
}
感谢任何帮助,我很困惑!
编译:
g++ -std=c++11 Example.cpp -lgmp -lgmpxx -o Example
您从未初始化 c
或 d
,因此您不能将它们用于计算。
我正在尝试用 C++ 编写一个简单的程序来演示 RSA 背后的数学原理。我正在使用 GMP 库 ( https://gmplib.org/ ),以便以后可以使用更大的素数对其进行扩展。
当我尝试计算解密指数 D 作为 e mod phi(n) 的 modular 逆时,它会出现段错误,我不知道为什么。
任何人都可以阐明这个问题吗?
#include <gmp.h> // For the GMP library
int main()
{
mpz_t n,p,q,e,c,d,h;
mpz_init(n);
mpz_init(h);
mpz_init_set_str(e, "65537", 10);
mpz_init_set_str(p, "1298849", 10);
mpz_init_set_str(q, "1298863", 10);
mpz_mul(n,p,q);
mpz_sub_ui(p, p, 1UL);
mpz_sub_ui(q, q, 1UL);
mpz_mul(h, p, q);
gmp_printf ("%Zd\n", h);
//This next line segfaults it.
mpz_invert(d,e,h);
return 0;
}
感谢任何帮助,我很困惑!
编译:
g++ -std=c++11 Example.cpp -lgmp -lgmpxx -o Example
您从未初始化 c
或 d
,因此您不能将它们用于计算。