Cryptography openssl对任何大小的密钥都是开放的

Cryptography openssl对任何大小的密钥都是开放的,cryptography,openssl,pyopenssl,Cryptography,Openssl,Pyopenssl,openssl如何使用密钥,因为它使用任意大小的密钥(1字节到任意大小)。此处转到实际关键点的步骤是什么 openssl enc -d -des-ecb -in cipher.txt -out text.out -K '530343412312345445123345677812345678812324' 我对该案的观察得出以下结论: 它采用十六进制值 如果大小小于8字节,则填充0 它以前8个字节作为密钥 openssl如何使用密钥。。。什么是程序 这取决于程序,但整个库的过程通常是一致的。

openssl如何使用密钥,因为它使用任意大小的密钥(1字节到任意大小)。此处转到实际关键点的步骤是什么

openssl enc -d -des-ecb -in cipher.txt -out text.out -K '530343412312345445123345677812345678812324' 

我对该案的观察得出以下结论:

  • 它采用十六进制值
  • 如果大小小于8字节,则填充0
  • 它以前8个字节作为密钥
  • openssl如何使用密钥。。。什么是程序

    这取决于程序,但整个库的过程通常是一致的。在您的示例中,您使用的是
    openssl-dec
    ,因此您使用的是
    dec
    子程序。源代码位于
    /apps/enc.c
    enc
    dec
    enc.c
    的一部分)

    以下是相关部分:

    unsigned char key[EVP_MAX_KEY_LENGTH],iv[EVP_MAX_IV_LENGTH];
    unsigned char salt[PKCS5_SALT_LEN];
    ...
    char *hkey=NULL,*hiv=NULL,*hsalt = NULL;
    
    -K
    的参数存储在
    hkey
    中:

    else if (strcmp(*argv,"-K") == 0)
    {
        if (--argc < 1) goto bad;
        hkey= *(++argv);
    }
    
    set\u hex
    如下所示,hex对通过
    -K
    传入的参数进行解码。它通过
    memset
    将未使用的长度填充回0。未使用的长度为
    EVP\u MAX\u KEY\u length
    减去长度
    -K
    参数(十六进制解码后)

    最后,关于第610行:

    if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
    {
        /* Handle failure */
    }
    
    注意
    -k
    (小
    k
    )采用不同的代码路径,并使用
    EVP\u BytesToKey
    导出密钥


    int set\u十六进制(字符*输入,无符号字符*输出,整数大小)
    {
    inti,n;
    无符号字符j;
    n=strlen(英寸);
    如果(n>(尺寸*2))
    {
    BIO_printf(BIO_err,“十六进制字符串太长\n”);
    返回(0);
    }
    memset(输出,0,大小);
    
    对于(i=0;i='0')&&&(j='A')&&(j='A')&&&(j='A')&&(j),我无法通过testokey实际计算出EVP_。第一种方法,'-K'十六进制键采用8字节键,并将每个字节的最后一位视为奇偶校验。您能解决这个问题吗
    if (!EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc))
    {
        /* Handle failure */
    }
    
    int set_hex(char *in, unsigned char *out, int size)
    {
        int i,n;
        unsigned char j;
    
        n=strlen(in);
        if (n > (size*2))
        {
            BIO_printf(bio_err,"hex string is too long\n");
            return(0);
        }
        memset(out,0,size);
        for (i=0; i<n; i++)
        {
            j=(unsigned char)*in;
            *(in++)='\0';
            if (j == 0) break;
            if ((j >= '0') && (j <= '9'))
                j-='0';
            else if ((j >= 'A') && (j <= 'F'))
                j=j-'A'+10;
            else if ((j >= 'a') && (j <= 'f'))
                j=j-'a'+10;
            else
            {
                BIO_printf(bio_err,"non-hex digit\n");
                return(0);
            }
            if (i&1)
                out[i/2]|=j;
            else
                out[i/2]=(j<<4);
        }
        return(1);
    }