cryptography - openssl命令行是否做key加强?

标签 cryptography openssl

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

echo "foo" | openssl dgst -sha256 -binary -hmac "test" | openssl base64

类似地,当使用 openssl 加密文件时(如下所示)密码短语是否使用盐进行哈希处理? (如果是这样,它是如何完成的?指向正确源文件的指针会更好。)

openssl enc -salt

最佳答案

hmac 选项不使用加盐或散列;它只是直接使用密码作为 key 。请参阅源代码分发中的 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;
            }

enc 命令似乎确实使用了某种形式的加盐,至少在某些情况下是这样。相关的源文件是 apps/enc.c,但似乎有一些注意事项:

            /* 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.
                     */

然后它使用函数 EVP_BytesToKey(在 crypto/evp/evp_key.c 中)生成一个随 secret 钥。这个函数似乎是一个非标准算法,乍一看似乎还不错,但除此之外我无法证明这一点。

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

关于cryptography - openssl命令行是否做key加强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008821/

相关文章:

javascript - Node 加密解密最终失败

php - 无法对 PHP 等效 NodeJS 加密进行加密/解密

cryptography - 7-zip 如何检查您提供的密码是否正确?

c# - 如何在 C# 中针对 MySQL 打开 openssl passwd -1

c++ - OpenSSL:接受TLS连接,然后转移到另一个进程

ruby-on-rails - 在nodejs算法中创建签名 rsa-sha1 private_key.pem

php - nodejs和php生成的不同HMAC

php - 加密:使用初始化向量与 key ?

git - 无法推送到 github,openssl 问题

macos - 弃用的 OpenSSL 功能