C 生成密码时出错
我正在使用PBKDF2使用SHA-256从密码生成密钥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("
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一样