我正在尝试使用 libgcrypt 中的 AES256 加密和解密文件。(见文档)
为了生成 256 位密钥,我argv[1]
使用 SHA256 对用户定义的字符串 ( ) 进行哈希处理。这工作得很好,但是当将它用作键时,库会失败并显示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 中。