OpenSSL使用SHA256摘要生成密钥

OpenSSL使用SHA256摘要生成密钥,openssl,digest,Openssl,Digest,默认情况下,当您生成EVP_PKEY密钥时,它将包含SHA1摘要,这可以通过以下代码证明: int def_nid; EVP_PKEY_get_default_digest_nid(pk, &def_nid); def_nid的值为0x64(SHA1)。有没有办法将其配置为SHA256或任何其他摘要算法 有没有办法将其配置为SHA256或任何其他摘要算法 否。根据以下文件: 如果您查看实现,您将看到其硬编码且不可配置: $ grep -R EVP_PKEY_get_default_d

默认情况下,当您生成
EVP_PKEY
密钥时,它将包含SHA1摘要,这可以通过以下代码证明:

int def_nid;
EVP_PKEY_get_default_digest_nid(pk, &def_nid);
def_nid
的值为0x64(SHA1)。有没有办法将其配置为SHA256或任何其他摘要算法

有没有办法将其配置为SHA256或任何其他摘要算法

否。根据以下文件:


如果您查看实现,您将看到其硬编码且不可配置:

$ grep -R EVP_PKEY_get_default_digest_nid *
...
crypto/evp/p_lib.c:int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid)
...
然后:

以及:

最后,从
crypto/hmac/hmu-ameth.c

static int hmac_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
    switch (op)
    {
        case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
            *(int *)arg2 = NID_sha1;
            return 1;

        default:
            return -2;
    }
}
static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
    X509_ALGOR *alg = NULL;
    switch (op)
    {
        ... 
        case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
            *(int *)arg2 = NID_sha1;
            return 1;
        ...
}
并且,从
crypto/rsa/rsa\u ameth.c

static int hmac_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
    switch (op)
    {
        case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
            *(int *)arg2 = NID_sha1;
            return 1;

        default:
            return -2;
    }
}
static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
    X509_ALGOR *alg = NULL;
    switch (op)
    {
        ... 
        case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
            *(int *)arg2 = NID_sha1;
            return 1;
        ...
}
static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
    X509_ALGOR *alg = NULL;
    switch (op)
    {
        ... 
        case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
            *(int *)arg2 = NID_sha1;
            return 1;
        ...
}