示例#1
0
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;
}
示例#2
0
文件: des.c 项目: wengych/ysclient
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);
}