void test_merge_bit() { //01101100 010 3 1 结果输出100 //merge_bit(108, 2, 3, 1); merge_bit(0x400, 0x13, 6, 2); cout << hex << update_bit(0x400, 0x13, 2, 6) << endl; }
void des(INT32 encry_flag,UCHAR *key,UCHAR *data,UCHAR *edata) { INT32 i, j; UCHAR tmp_bit[64]; spilt_bit(key,8,key_bit); spilt_bit(data,8,data_bit); key_calculation(key_bit); for (i=0;i<32;i++) { /* initial permutate */ data_lbit[i] = data_bit[des_ip[i]-1]; data_rbit[i] = data_bit[des_ip[i+32]-1]; } switch (encry_flag) { case 1: /* encry data */ for (i=0;i<16;i++) { /* L' = R, R' = L xor f(R,Kn) */ for (j=0;j<32;j++) tmp_bit[j] = data_rbit[j]; f_cipher(data_rbit,key_k[i],frk_bit); bit_xor(data_lbit,frk_bit,32,data_rbit); for (j=0;j<32;j++) data_lbit[j] = tmp_bit[j]; } break; default: /* decry data */ for (i=15;i>=0;i--) { /* L' = R, R' = L xor f(R,Kn) */ for (j=0;j<32;j++) tmp_bit[j] = data_rbit[j]; f_cipher(data_rbit,key_k[i],frk_bit); bit_xor(data_lbit,frk_bit,32,data_rbit); for (j=0;j<32;j++) data_lbit[j] = tmp_bit[j]; } break; } for (i=0;i<32;i++) { tmp_bit[i] = data_rbit[i]; tmp_bit[i+32] = data_lbit[i]; } for (i=0;i<64;i++) /* inverse initial perm */ data_bit[i] = tmp_bit[des_rip[i]-1]; merge_bit(data_bit,8,edata); }