PKCS5_PBKDF2_HMAC:二进制密码

时间:2015-05-26 06:50:00

标签: c openssl pbkdf2

我将使用PKCS5_PBKDF2_HMAC来派生密钥。密码参数为const char*。这是否意味着它必须仅包含可打印的字符?我可以使用二进制密码吗? OpenSSL Documentation对此一无所知。唯一的线索是使用char而不是unsigned char,但仅此而已:

 int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
                   const unsigned char *salt, int saltlen, int iter,
                   const EVP_MD *digest,
                   int keylen, unsigned char *out);

RFC提到password, an octet string P 快捷方式。这是否意味着我可以使用二进制密码编码为十六进制字符串?

1 个答案:

答案 0 :(得分:1)

  

这是否意味着它必须仅包含可打印的字符?

NO。

如果是二进制密码,则表示您必须在passlen中指定其长度。您无法passlen设置为-1,因为strlen无法正常工作。

  

我可以使用二进制密码吗?

YES。

请务必在passlen中指定长度。

  

这是否意味着我可以使用二进制密码编码为十六进制字符串?

YES。

原始八位字节,十六进制编码,Base32编码或Base64编码之间没有区别。它们是表示格式,它们都具有相同的熵。熵将由推导函数提取。

不同的编码将导致不同的派生密钥,但所有派生密钥将具有相同的熵值。

相关,请参阅What does OpenSSL's PKCS5_PBKDF2_HMAC_SHA1 return value mean?以获取有关该功能的分析。它是在OpenSSL提供有关该函数的文档之前提供的。

另请参阅其他相关问题,例如How to use PKCS5_PBKDF2_HMAC_SHA1()