我试图使用libgcrypt中的AES256加密和解密文件。 (请参阅doc)AES256 Libgcrypt密钥长度无效
要生成256位密钥,我使用SHA256散列用户定义的字符串(argv[1]
)。这很好用,但是当它用作密钥时,库会以Invalid key length
失败。
见代码片段如下:
gcry_md_hd_t hd;
gcry_md_open(&hd, GCRY_MD_SHA256, GCRY_MD_FLAG_SECURE);
gcry_md_write(hd, argv[1], strnlen(argv[1], P_DIARY_MAXPWDLEN));
unsigned char * hash = gcry_md_read(hd, GCRY_MD_SHA256);
gcry_cipher_hd_t cipher;
gcry_cipher_open(&cipher, GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_CBC, GCRY_MD_FLAG_SECURE);
gcry_cipher_setkey(cipher, hash, 256);
我必须用一个空结束的字符串?我不想为散列分配更多内存(这可能需要空字节),因为它应该放置在SECUREMEM中。