⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.c

📁 des和3des加密算法
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
        for (j=0; j<48; j++)
        {
            k = m_e_tbl [j];
            byte_n1 = 4 + (k >> 3);
            bit_n1  = k & 0x07;
            if ((co_buf[byte_n1]&m_bit8_tbl [bit_n1]) != 0)
            {
                tmp_buf[byte_n] |= m_bit8_tbl [bit_n];
            }
            if (++bit_n >= 8)
            {
                bit_n = 0;
                byte_n++;
            }
        }
        if (encry_decry != 0)
        {
            j = i*6;
        }
        else
        {
            j = (15-i)*6;
        }
        tmp_buf[0]   ^= ki_buf[j];
        tmp_buf[1]   ^= ki_buf[j+1];
        tmp_buf[2]   ^= ki_buf[j+2];
        tmp_buf[3]   ^= ki_buf[j+3];
        tmp_buf[4]   ^= ki_buf[j+4];
        tmp_buf[5]   ^= ki_buf[j+5];
        byte_n        = (tmp_buf[0]&0x80)>>6  |  (tmp_buf[0]&0x04)>>2;
        bit_n         = (tmp_buf[0]&0x78)>>3;
        s_out_buf[0]  = m_s1_tbl[byte_n][bit_n] << 4;
        byte_n        = (tmp_buf[0]&0x02)     |  (tmp_buf[1]&0x10)>>4;
        bit_n         = (tmp_buf[0]&0x01)<<3  |  tmp_buf[1]>>5;
        s_out_buf[0] |= m_s2_tbl[byte_n][bit_n];
        byte_n        = (tmp_buf[1]&0x08)>>2  |  (tmp_buf[2]&0x40)>>6;
        bit_n         = (tmp_buf[1]&0x07)<<1  |  tmp_buf[2]>>7;
        s_out_buf[1]  = m_s3_tbl[byte_n][bit_n] << 4;
        byte_n        = (tmp_buf[2]&0x20)>>4  |  (tmp_buf[2]&0x01);
        bit_n         = (tmp_buf[2]&0x1e) >> 1;
        s_out_buf[1] |= m_s4_tbl[byte_n][bit_n];
        byte_n        = (tmp_buf[3]&0x80)>>6  |  (tmp_buf[3]&0x04)>>2;
        bit_n         = (tmp_buf[3]&0x78) >> 3;
        s_out_buf[2]  = m_s5_tbl[byte_n][bit_n] << 4;
        byte_n        = (tmp_buf[3]&0x02)     | (tmp_buf[4]&0x10)>>4;
        bit_n         = (tmp_buf[3]&0x01)<<3  |  tmp_buf[4]>>5;
        s_out_buf[2] |= m_s6_tbl[byte_n][bit_n];
        byte_n        = (tmp_buf[4]&0x08)>>2  |  (tmp_buf[5]&0x40)>>6;
        bit_n         = (tmp_buf[4]&0x07)<<1  |  tmp_buf[5]>>7;
        s_out_buf[3]  = m_s7_tbl[byte_n][bit_n] << 4;
        byte_n        = (tmp_buf[5]&0x20)>>4  |  (tmp_buf[5]&0x01);
        bit_n         = (tmp_buf[5]&0x1e) >> 1;
        s_out_buf[3] |= m_s8_tbl[byte_n][bit_n];
        byte_n        = 0;
        bit_n         = 0;
        tmp_buf[0]    = 0;
        tmp_buf[1]    = 0;
        tmp_buf[2]    = 0;
        tmp_buf[3]    = 0;
        for (j=0; j<32; j++)
        {
            k       = m_p_tbl [j];
            byte_n1 = k >> 3;
            bit_n1  = k & 0x07;
            if ((s_out_buf[byte_n1]&m_bit8_tbl [bit_n1]) != 0)
            {
                tmp_buf[byte_n] |= m_bit8_tbl [bit_n];
            }
            if (++bit_n >= 8)
            {
                bit_n = 0;
                byte_n++;
            }
        }
        tmp_buf[0] ^= co_buf[0];
        tmp_buf[1] ^= co_buf[1];
        tmp_buf[2] ^= co_buf[2];
        tmp_buf[3] ^= co_buf[3];
        co_buf[0]   = co_buf[4];
        co_buf[1]   = co_buf[5];
        co_buf[2]   = co_buf[6];
        co_buf[3]   = co_buf[7];
        co_buf[4]   = tmp_buf[0];
        co_buf[5]   = tmp_buf[1];
        co_buf[6]   = tmp_buf[2];
        co_buf[7]   = tmp_buf[3];
    }
    tmp_buf[0]      = co_buf[4];
    tmp_buf[1]      = co_buf[5];
    tmp_buf[2]      = co_buf[6];
    tmp_buf[3]      = co_buf[7];
    tmp_buf[4]      = co_buf[0];
    tmp_buf[5]      = co_buf[1];
    tmp_buf[6]      = co_buf[2];
    tmp_buf[7]      = co_buf[3];
    byte_n          = 0;
    bit_n           = 0;
    co_buf[0]       = 0;
    co_buf[1]       = 0;
    co_buf[2]       = 0;
    co_buf[3]       = 0;
    co_buf[4]       = 0;
    co_buf[5]       = 0;
    co_buf[6]       = 0;
    co_buf[7]       = 0;
    for (i=0; i<64; i++)
    {
        j       = m_ip1_tbl [i];
        byte_n1 = j >> 3;
        bit_n1  = j&0x07;
        if ((tmp_buf[byte_n1]&m_bit8_tbl [bit_n1]) != 0)
        {
            co_buf[byte_n] |= m_bit8_tbl [bit_n];
        }
        if (++bit_n >= 8)
        {
            bit_n = 0;
            byte_n++;
        }
    }
}


/***************************************************************************************************
 description:  des encrypt
 input:        pi_buf[8]:      plain input,    8 bytes,   MSB first
               ks_buf[8]:      key seed Buf,   8 bytes,   MSB first
 output:       co_buf[8]:      crypto output,  8 bytes,   MSB first
 return:
***************************************************************************************************/
#ifdef    _F_DES_ENCRYPT_
void  f_des_encrypt (unsigned char pi_buf[], unsigned char ks_buf[], unsigned char co_buf[])
{
    unsigned char ki_buf[96];

    f_build_ki (ks_buf, ki_buf);
    f_des      (pi_buf, ki_buf, co_buf, 1);
}
#endif


/***************************************************************************************************
 description:  des decrypt
 input:        ci_buf[8]:      crypto input,   8 bytes,   MSB first
               ks_buf[8]:      key seed Buf,   8 bytes,   MSB first
 output:       po_buf[8]:      plain output,   8 bytes,   MSB first
 return:
***************************************************************************************************/
#ifdef    _F_DECRYPT_
void  f_des_decrypt (unsigned char ci_buf[], unsigned char ks_buf[], unsigned char po_buf[])
{
    unsigned char ki_buf[96];

    f_build_ki (ks_buf, ki_buf);
    f_des      (ci_buf, ki_buf, po_buf, 0);
}
#endif


/***************************************************************************************************
 description:  3 f_des encrypt
 input:        pi_buf[8]:      plain input,    8 bytes,   MSB first
               ks_buf[16]:     key seed Buf,  16 bytes,   MSB first
 output:       co_buf[8]:      crypto output,  8 bytes,   MSB first
 return:
***************************************************************************************************/
#ifdef    _F_DES3_ENCRYPT_
void  f_des3_encrypt(unsigned char pi_buf[], unsigned char ks_buf[], unsigned char co_buf[])
{
    unsigned char ki_buf[96], tmp_buf[8];

    f_build_ki (ks_buf, ki_buf);
    f_des      (pi_buf, ki_buf, co_buf, 1);
    f_des_clr_wdt  ( );
    f_build_ki (ks_buf+8, ki_buf);
    f_des      (co_buf, ki_buf, tmp_buf, 0);
    f_des_clr_wdt  ( );
    f_build_ki (ks_buf, ki_buf);
    f_des      (tmp_buf, ki_buf, co_buf, 1);
}
#endif


/***************************************************************************************************
 description:  3 des decrypt
 input:        ci_buf[8]:      crypto input,   8 bytes,   MSB first
               ks_buf[16]:     key seed Buf,  16 bytes,   MSB first
 output:       po_buf[8]:      plain output,   8 bytes,   MSB first
 return:
***************************************************************************************************/
#ifdef    _F_DES3_DECRYPT_
void  f_des3_decrypt(unsigned char ci_buf[], unsigned char ks_buf[], unsigned char po_buf[])
{
    unsigned char ki_buf[96], tmp_buf[8];

    f_build_ki (ks_buf, ki_buf);
    f_des      (ci_buf, ki_buf, po_buf, 0);
    f_des_clr_wdt  ( );
    f_build_ki (ks_buf+8, ki_buf);
    f_des      (po_buf, ki_buf, tmp_buf, 1);
    f_des_clr_wdt  ( );
    f_build_ki (ks_buf, ki_buf);
    f_des      (tmp_buf, ki_buf, po_buf, 0);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -