【问题标题】:AES256 Libgcrypt Invalid Key LengthAES256 Libgcrypt 密钥长度无效
【发布时间】:2017-08-24 08:38:05
【问题描述】:

我正在尝试使用 libgcrypt 中的 AES256 加密和解密文件。 (见doc

为了生成 256 位密钥,我使用 SHA256 对用户定义的字符串 (argv[1]) 进行哈希处理。这工作得很好,但是当使用它作为密钥时,库会失败并显示Invalid key length

参见下面的代码 sn-p:

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 中。

【问题讨论】:

    标签: c aes libgcrypt


    【解决方案1】:

    好的,我发现我的错误:
    gcry_cipher_setkey() 需要以字节为单位的长度,所以是 32 而不是 256。

    来自doc

    函数:gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t h, const void *k, size_t l)

    [...] 密钥k 的长度l(以字节为单位)必须匹配为此上下文设置的算法所需的长度,或者在具有可变密钥大小的算法的允许范围内。该函数对此进行检查并在出现问题时返回错误。调用者应始终检查错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2010-12-18
      • 2018-07-03
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多