1

我正在使用 libgcrypt 函数gcry_prime_check来测试该数字3是否为质数。根据我的功能,事实证明 3 不是质数。我究竟做错了什么?

这是我的代码

#include <gcrypt.h>
#include <stdio.h>

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 输出传递给质数检查功能时……它通过了!

4

2 回答 2

1

这是一个错误。像大多数素数测试一样,它在进行更昂贵的测试之前测试小素数的可分性。不幸的是,如果你的素数是这些值之一,它被报告为可整除(单独) - 因此是复合的。

由于 libgcrypt 的重点是加密应用程序,所以这么小的素数没有用处。虽然它很草率,而且不需要太多时间来纠正。

于 2012-07-13T07:11:13.193 回答
0

这是函数原型,它需要一个gcry_mpi_t结构和一个整数。

gcry_error_t gcry_prime_check (gcry_mpi_t p, unsigned int flags)

gcry_mpi_t:此类型表示一个保存 MPI 的对象。

gcry_mpi_t可以使用gcry_mpi_new函数分配结构

并且可以使用该gcry_mpi_set功能进行设置。

于 2012-07-13T05:24:24.863 回答