C Libgcrypt:无法使用libgcrypt检查数字是否为素数
我正在使用libgcrypt函数gcry_prime_check
来测试数字3
是否为素数。 事实certificate,根据我的function,3不是素数。 我究竟做错了什么?
这是我的代码
#include #include int main(void) { gcry_mpi_t cript_prime; gcry_error_t err; char buffer[8] = {0}; char number[8] = {0}; printf("%s\n", gcry_check_version ( NULL ) ); gcry_control( GCRYCTL_INIT_SECMEM, 16384, 0 ); cript_prime = gcry_mpi_new(16); strcpy(number,"3"); gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL); gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime); printf("The number tested is: %s\n",buffer); err = gcry_prime_check(cript_prime,4); if(err) { printf("%s\n",gcry_strerror(err)); } gcry_mpi_release(cript_prime); return 0; }
这是输出
1.4.4 The number tested is: 3 Number is not prime
另外,一个关于使用libgcrypt的好教程的链接将是一个很大的好处。 谢谢
编辑:
好吧,我设法使用gcry_prime_generate
生成素数并将值复制到number
。 原来它没有通过检查。 但是当你直接将素数生成的mpi输出传递给素数检查函数时……它会通过!
这是一个错误。 像大多数主要测试一样,在进行更昂贵的测试之前,它会通过小的素数值来测试可分性。 不幸的是,如果你的素数是这些值中的一个,它被报告为可分割 (单独) – 因此是复合的。
由于libgcrypt的重点是加密应用程序,因此这样的小素数没有效用。 虽然很草率,但不会花很多时间来纠正。
这是函数原型,它采用gcry_mpi_t
结构和Integer。
gcry_error_t gcry_prime_check (gcry_mpi_t p, unsigned int flags)
gcry_mpi_t
:此类型表示保存MPI的对象。
可以使用gcry_mpi_new
函数分配gcry_mpi_t
结构
并且可以使用gcry_mpi_set
函数进行设置。