📄 des.c
字号:
}
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 + -