我是libgcrypt
版本1.6.1的新手,现在我试图为rsa
算法产生一个公钥/私钥对。gcry_pk_genkey函数在libgcrypt中速度很慢
我列出了我在下面使用的代码。我陷入的是gcry_pk_genkey
函数,其中它可能需要超过1.5小时,但从不返回。
void gcrypt_init()
{
if (!gcry_check_version (GCRYPT_VERSION))
{
xerr("gcrypt: library version mismatch");
}
gcry_error_t err = 0;
err &= gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
err &= gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
err &= gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
err &= gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
if (err) {
xerr("gcrypt: failed initialization");
}
}
#include "gcry.hh"
#include <cstdio>
#include <cstdlib>
#include <cstring>
int main(int argc, char** argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s <rsa-keypair.sp>\n", argv[0]);
xerr1("Invalid arguments.");
}
gcrypt_init();
gcry_error_t err = 0;
gcry_sexp_t rsa_parms;
gcry_sexp_t rsa_keypair;
err &= gcry_sexp_build(&rsa_parms, NULL, "(genkey (rsa (nbits 4:2048)))");
if (err) {
xerr1("gcrypt: failed to create rsa params");
}
err &= gcry_pk_genkey(&rsa_keypair, rsa_parms); <------- This function call
if (err) {
xerr1("gcrypt: failed to create rsa key pair");
}
char* fname = argv[1];
err = gcrypt_sexp_to_file(fname, rsa_keypair, 1 << 16);
printf("i am here3\n");
gcry_sexp_release(rsa_keypair);
gcry_sexp_release(rsa_parms);
return err;
}
我知道这个函数can take a few minutes. Your computer needs to gather random entropy.
。然而,我几乎不相信它可能需要将近2个小时没有返回/抛出的异常...
我正在使用32位Ubuntu 14.04,在一个virtualbox
虚拟机实例内。我在这里做错了什么?
你好马尔滕,非常感谢你的建议。您能否详细说明“稍不安全的随机数生成器”?我应该如何配置该设置?谢谢! – computereasy
这是[在手册中](https://gnupg.org/documentation/manuals/gcrypt/gcrypt.pdf),用作字符串中的标志。还没有尝试过自己。如果这是个问题,你可能想看看你可以对'/ dev/random'执行较慢的操作,其他进程也可能遇到问题。 –
你是对的...我试过'cat/dev/random',它产生了一些输出,然后被卡住了... – computereasy