Cryptography openssl命令行是否执行密钥增强?

Cryptography openssl命令行是否执行密钥增强?,cryptography,openssl,Cryptography,Openssl,如果我在hmac模式下运行openssl命令行(如下所示),是直接使用hmac的密钥,还是在将其用作密钥之前对其进行哈希处理 echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64 类似地,当使用openssl(如下所示)加密文件时,密码短语是否用salt散列?(如果是这样的话,是如何做到的?一个指向正确源文件的指针会更好。) hmac选项不使用盐析或散列;它只是直接使用密码短语作为密钥。请参见源代码分发中

如果我在hmac模式下运行openssl命令行(如下所示),是直接使用hmac的密钥,还是在将其用作密钥之前对其进行哈希处理

echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64
类似地,当使用openssl(如下所示)加密文件时,密码短语是否用salt散列?(如果是这样的话,是如何做到的?一个指向正确源文件的指针会更好。)


hmac选项不使用盐析或散列;它只是直接使用密码短语作为密钥。请参见源代码分发中的
apps/dgst.c

            else if (!strcmp(*argv,"-hmac"))
                    {
                    if (--argc < 1)
                            break;
                    hmac_key=*++argv;
                    }
    ...

    if (hmac_key)
            {
            sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
                                    (unsigned char *)hmac_key, -1);
            if (!sigkey)
                    goto end;
            }
然后,它使用函数
EVP_BytesToKey
(在
crypto/EVP/EVP_key.c
中)生成一个随机密钥。这个函数似乎是一个非标准的算法,简单看一眼,它看起来似乎还行,但除此之外,我无法证明它


源代码片段和注释都来自OpenSSL 1.0.0版本。

谢谢!我想我现在完全明白了。我在这里还找到了该函数的doc:EVP_BytesToKey与PBKDF1非常接近。注意,对于enc命令,使用-k或-kfile进行盐析,使用-k不进行盐析。在源代码中,-k和-kfile填充str,而-k填充hkey。
            else if (!strcmp(*argv,"-hmac"))
                    {
                    if (--argc < 1)
                            break;
                    hmac_key=*++argv;
                    }
    ...

    if (hmac_key)
            {
            sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
                                    (unsigned char *)hmac_key, -1);
            if (!sigkey)
                    goto end;
            }
            /* Note that str is NULL if a key was passed on the command
             * line, so we get no salt in that case. Is this a bug?
             */
            if (str != NULL)
                    {
                    /* Salt handling: if encrypting generate a salt and
                     * write to output BIO. If decrypting read salt from
                     * input BIO.
                     */