我将使用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 快捷方式。这是否意味着我可以使用二进制密码编码为十六进制字符串?
答案 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()。