C 生成密码时出错

C 生成密码时出错,c,gcc,segmentation-fault,libgcrypt,C,Gcc,Segmentation Fault,Libgcrypt,我正在使用PBKDF2使用SHA-256从密码生成密钥 int genKeyFromPass() { int i; void *pwd, *salt = "someRandomSalt"; unsigned char keyBuffer[16]; size_t saltLen, keySize = 16; gpg_error_t errStatus; unsigned long iterations = 1024; printf("

我正在使用PBKDF2使用SHA-256从密码生成密钥

int genKeyFromPass()
{
    int i; 
    void *pwd, *salt = "someRandomSalt";
    unsigned char keyBuffer[16]; 
    size_t saltLen, keySize = 16;
    gpg_error_t errStatus; 
    unsigned long iterations = 1024; 
    printf("Enter the password to generate key: ");
    scanf("%s", pwd);
    errStatus = gcry_kdf_derive(pwd, strlen(pwd), GCRY_KDF_PBKDF2, GCRY_MD_SHA512, salt, strlen(salt), iterations, keySize, keyBuffer);
    if(errStatus != 0)
    {
        printf("Error generating key from password!\n");
        printf("Error no: %d and message: %s\n ", errStatus, gcry_strerror(errno)); 
    }
    printf("Key: ");        
    printf("%s", keyBuffer);
    return 0;
}
我有以下问题:

  • 我的函数总是打印“从密码生成密钥时出错”,但当我打印错误消息时,它会打印成功。为什么生成密码时出错

  • 我不知道是否提供了
    keysize
    的值。谁能解释一下我需要在这个参数中输入什么

  • 当我运行这段代码时,我在
    gcry\u kdf\u-deriver
    行中得到分段错误。为什么会这样


  • 谢谢。

    这是
    gcry\u strerror(errStatus)
    ,不是
    gcry\u strerror(errno)
    。修复它,看看错误是什么。我也尝试过,但得到了相同的结果。keyBuffer应该是实际的缓冲区,而不是空指针。例如,
    unsignedcharkeybuffer[32]。我猜您的密钥大小是32,因为AES-256有一个256位的密钥,即32字节。另外,不要将事物声明为
    void*
    。原始字节应保存在
    无符号字符
    数组中。我将代码更改为具有
    无符号字符键缓冲区[16]
    ,就像我使用AES128一样