?? des.c
字號:
#include "reader.h"
int des(unsigned char *source,unsigned char * dest,unsigned char * inkey, int flg);
//int _tmain(int argc, _TCHAR* argv[])
/*
void main(void)
{
int i;
//unsigned char s[65]="DES算法是這樣工作的:如Mode為加密,則用Key 去把數據Data進行加abc";
unsigned char s[65]={1,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
unsigned char d[65]={0};
unsigned char k[11]={0xfe,0x9b,0xd5,0x16,0xcd,0x15,0xc8,0x49};
unsigned char m[65]={0};
for(i =0;i<8;i++)
{
des(&s[8*i],&d[8*i],k,1);
}
for(i =0;i<8;i++)
{
des(&d[8*i],&m[8*i],k,1);
}
} */
/* ============================================================
des()
Description: DES algorithm,do encript or descript.
============================================================ */
int des(unsigned char *source,unsigned char * dest,unsigned char * inkey, int flg)
{
unsigned char nbrofshift, temp1, temp2;
int valindex;
register i, j, k, iter;
/* INITIALIZE THE TABLES */
/* Table - s1 */
unsigned char code s1[4][16] = {
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 };
/* Table - s2 */
unsigned char code s2[4][16] = {
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 };
/* Table - s3 */
unsigned char code s3[4][16] = {
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 };
/* Table - s4 */
unsigned char code s4[4][16] = {
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 };
/* Table - s5 */
unsigned char code s5[4][16] = {
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 };
/* Table - s6 */
unsigned char code s6[4][16] = {
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 };
/* Table - s7 */
unsigned char code s7[4][16] = {
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 };
/* Table - s8 */
unsigned char code s8[4][16] = {
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 };
/* Table - Shift */
unsigned char code shift[16] = {
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
/* Table - Binary */
unsigned char code binary[64] = {
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1,
0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1,
1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1 };
/* MAIN PROCESS */
/* Convert from 64-bit key into 64-byte key */
for (i = 0; i < 8; i++) {
k=8*i;
u_ram.des_str.key[k] =((j = *(inkey + i))>>7) & 1;// ((j = *(inkey + i)) / 128) % 2;
u_ram.des_str.key[k+1] =(j>>6)&0x01; // (j / 64) % 2;
u_ram.des_str.key[k+2] =(j>>5)&0x01; // (j / 32) % 2;
u_ram.des_str.key[k+3] =(j>>4)&1; // (j / 16) % 2;
u_ram.des_str.key[k+4] =(j>>3)&1; // (j / 8) % 2;
u_ram.des_str.key[k+5] =(j>>2)&1; // (j / 4) % 2;
u_ram.des_str.key[k+6] =(j>>1)&1; // (j / 2) % 2;
u_ram.des_str.key[k+7] = j & 1;
}
/* Convert from 64-bit data into 64-byte data */
for (i = 0; i < 8; i++) {
k=8*i;
u_ram.des_str.buffer[k] = ((j = *(source + i))>>7) % 2;// ((j = *(source + i)) / 128) % 2;
u_ram.des_str.buffer[k+1] =(j>>6)&1; // (j / 64) % 2;
u_ram.des_str.buffer[k+2] =(j>>5)&1; // (j / 32) % 2;
u_ram.des_str.buffer[k+3] =(j>>4)&1; // (j / 16) % 2;
u_ram.des_str.buffer[k+4] =(j>>3)&1; // (j / 8) % 2;
u_ram.des_str.buffer[k+5] =(j>>2)&1; // (j / 4) % 2;
u_ram.des_str.buffer[k+6] =(j>>1)&1; // (j / 2) % 2;
u_ram.des_str.buffer[k+7] = j & 1;
}
/* Initial Permutation of Data */
u_ram.des_str.bufout[ 0] = u_ram.des_str.buffer[57];
u_ram.des_str.bufout[ 1] = u_ram.des_str.buffer[49];
u_ram.des_str.bufout[ 2] = u_ram.des_str.buffer[41];
u_ram.des_str.bufout[ 3] = u_ram.des_str.buffer[33];
u_ram.des_str.bufout[ 4] = u_ram.des_str.buffer[25];
u_ram.des_str.bufout[ 5] = u_ram.des_str.buffer[17];
u_ram.des_str.bufout[ 6] = u_ram.des_str.buffer[ 9];
u_ram.des_str.bufout[ 7] = u_ram.des_str.buffer[ 1];
u_ram.des_str.bufout[ 8] = u_ram.des_str.buffer[59];
u_ram.des_str.bufout[ 9] = u_ram.des_str.buffer[51];
u_ram.des_str.bufout[10] = u_ram.des_str.buffer[43];
u_ram.des_str.bufout[11] = u_ram.des_str.buffer[35];
u_ram.des_str.bufout[12] = u_ram.des_str.buffer[27];
u_ram.des_str.bufout[13] = u_ram.des_str.buffer[19];
u_ram.des_str.bufout[14] = u_ram.des_str.buffer[11];
u_ram.des_str.bufout[15] = u_ram.des_str.buffer[ 3];
u_ram.des_str.bufout[16] = u_ram.des_str.buffer[61];
u_ram.des_str.bufout[17] = u_ram.des_str.buffer[53];
u_ram.des_str.bufout[18] = u_ram.des_str.buffer[45];
u_ram.des_str.bufout[19] = u_ram.des_str.buffer[37];
u_ram.des_str.bufout[20] = u_ram.des_str.buffer[29];
u_ram.des_str.bufout[21] = u_ram.des_str.buffer[21];
u_ram.des_str.bufout[22] = u_ram.des_str.buffer[13];
u_ram.des_str.bufout[23] = u_ram.des_str.buffer[ 5];
u_ram.des_str.bufout[24] = u_ram.des_str.buffer[63];
u_ram.des_str.bufout[25] = u_ram.des_str.buffer[55];
u_ram.des_str.bufout[26] = u_ram.des_str.buffer[47];
u_ram.des_str.bufout[27] = u_ram.des_str.buffer[39];
u_ram.des_str.bufout[28] = u_ram.des_str.buffer[31];
u_ram.des_str.bufout[29] = u_ram.des_str.buffer[23];
u_ram.des_str.bufout[30] = u_ram.des_str.buffer[15];
u_ram.des_str.bufout[31] = u_ram.des_str.buffer[ 7];
u_ram.des_str.bufout[32] = u_ram.des_str.buffer[56];
u_ram.des_str.bufout[33] = u_ram.des_str.buffer[48];
u_ram.des_str.bufout[34] = u_ram.des_str.buffer[40];
u_ram.des_str.bufout[35] = u_ram.des_str.buffer[32];
u_ram.des_str.bufout[36] = u_ram.des_str.buffer[24];
u_ram.des_str.bufout[37] = u_ram.des_str.buffer[16];
u_ram.des_str.bufout[38] = u_ram.des_str.buffer[ 8];
u_ram.des_str.bufout[39] = u_ram.des_str.buffer[ 0];
u_ram.des_str.bufout[40] = u_ram.des_str.buffer[58];
u_ram.des_str.bufout[41] = u_ram.des_str.buffer[50];
u_ram.des_str.bufout[42] = u_ram.des_str.buffer[42];
u_ram.des_str.bufout[43] = u_ram.des_str.buffer[34];
u_ram.des_str.bufout[44] = u_ram.des_str.buffer[26];
u_ram.des_str.bufout[45] = u_ram.des_str.buffer[18];
u_ram.des_str.bufout[46] = u_ram.des_str.buffer[10];
u_ram.des_str.bufout[47] = u_ram.des_str.buffer[ 2];
u_ram.des_str.bufout[48] = u_ram.des_str.buffer[60];
u_ram.des_str.bufout[49] = u_ram.des_str.buffer[52];
u_ram.des_str.bufout[50] = u_ram.des_str.buffer[44];
u_ram.des_str.bufout[51] = u_ram.des_str.buffer[36];
u_ram.des_str.bufout[52] = u_ram.des_str.buffer[28];
u_ram.des_str.bufout[53] = u_ram.des_str.buffer[20];
u_ram.des_str.bufout[54] = u_ram.des_str.buffer[12];
u_ram.des_str.bufout[55] = u_ram.des_str.buffer[ 4];
u_ram.des_str.bufout[56] = u_ram.des_str.buffer[62];
u_ram.des_str.bufout[57] = u_ram.des_str.buffer[54];
u_ram.des_str.bufout[58] = u_ram.des_str.buffer[46];
u_ram.des_str.bufout[59] = u_ram.des_str.buffer[38];
u_ram.des_str.bufout[60] = u_ram.des_str.buffer[30];
u_ram.des_str.bufout[61] = u_ram.des_str.buffer[22];
u_ram.des_str.bufout[62] = u_ram.des_str.buffer[14];
u_ram.des_str.bufout[63] = u_ram.des_str.buffer[6];
/* Initial Permutation of Key */
u_ram.des_str.kwork[0] = u_ram.des_str.key[56];
u_ram.des_str.kwork[ 1] = u_ram.des_str.key[48];
u_ram.des_str.kwork[ 2] = u_ram.des_str.key[40];
u_ram.des_str.kwork[ 3] = u_ram.des_str.key[32];
u_ram.des_str.kwork[ 4] = u_ram.des_str.key[24];
u_ram.des_str.kwork[ 5] = u_ram.des_str.key[16];
u_ram.des_str.kwork[ 6] = u_ram.des_str.key[ 8];
u_ram.des_str.kwork[ 7] = u_ram.des_str.key[ 0];
u_ram.des_str.kwork[ 8] = u_ram.des_str.key[57];
u_ram.des_str.kwork[ 9] = u_ram.des_str.key[49];
u_ram.des_str.kwork[10] = u_ram.des_str.key[41];
u_ram.des_str.kwork[11] = u_ram.des_str.key[33];
u_ram.des_str.kwork[12] = u_ram.des_str.key[25];
u_ram.des_str.kwork[13] = u_ram.des_str.key[17];
u_ram.des_str.kwork[14] = u_ram.des_str.key[ 9];
u_ram.des_str.kwork[15] = u_ram.des_str.key[ 1];
u_ram.des_str.kwork[16] = u_ram.des_str.key[58];
u_ram.des_str.kwork[17] = u_ram.des_str.key[50];
u_ram.des_str.kwork[18] = u_ram.des_str.key[42];
u_ram.des_str.kwork[19] = u_ram.des_str.key[34];
u_ram.des_str.kwork[20] = u_ram.des_str.key[26];
u_ram.des_str.kwork[21] = u_ram.des_str.key[18];
u_ram.des_str.kwork[22] = u_ram.des_str.key[10];
u_ram.des_str.kwork[23] = u_ram.des_str.key[ 2];
u_ram.des_str.kwork[24] = u_ram.des_str.key[59];
u_ram.des_str.kwork[25] = u_ram.des_str.key[51];
u_ram.des_str.kwork[26] = u_ram.des_str.key[43];
u_ram.des_str.kwork[27] = u_ram.des_str.key[35];
u_ram.des_str.kwork[28] = u_ram.des_str.key[62];
u_ram.des_str.kwork[29] = u_ram.des_str.key[54];
u_ram.des_str.kwork[30] = u_ram.des_str.key[46];
u_ram.des_str.kwork[31] = u_ram.des_str.key[38];
u_ram.des_str.kwork[32] = u_ram.des_str.key[30];
u_ram.des_str.kwork[33] = u_ram.des_str.key[22];
u_ram.des_str.kwork[34] = u_ram.des_str.key[14];
u_ram.des_str.kwork[35] = u_ram.des_str.key[ 6];
u_ram.des_str.kwork[36] = u_ram.des_str.key[61];
u_ram.des_str.kwork[37] = u_ram.des_str.key[53];
u_ram.des_str.kwork[38] = u_ram.des_str.key[45];
u_ram.des_str.kwork[39] = u_ram.des_str.key[37];
u_ram.des_str.kwork[40] = u_ram.des_str.key[29];
u_ram.des_str.kwork[41] = u_ram.des_str.key[21];
u_ram.des_str.kwork[42] = u_ram.des_str.key[13];
u_ram.des_str.kwork[43] = u_ram.des_str.key[ 5];
u_ram.des_str.kwork[44] = u_ram.des_str.key[60];
u_ram.des_str.kwork[45] = u_ram.des_str.key[52];
u_ram.des_str.kwork[46] = u_ram.des_str.key[44];
u_ram.des_str.kwork[47] = u_ram.des_str.key[36];
u_ram.des_str.kwork[48] = u_ram.des_str.key[28];
u_ram.des_str.kwork[49] = u_ram.des_str.key[20];
u_ram.des_str.kwork[50] = u_ram.des_str.key[12];
u_ram.des_str.kwork[51] = u_ram.des_str.key[ 4];
u_ram.des_str.kwork[52] = u_ram.des_str.key[27];
u_ram.des_str.kwork[53] = u_ram.des_str.key[19];
u_ram.des_str.kwork[54] = u_ram.des_str.key[11];
u_ram.des_str.kwork[55] = u_ram.des_str.key[ 3];
/* 16 Iterations */
for (iter = 1; iter < 17; iter++) {
for (i = 0; i < 32; i++)
{
u_ram.des_str.buffer[i] = u_ram.des_str.bufout[32+i];
}
/* Calculation of F(R, K) */
/* Permute - E */
u_ram.des_str.worka[ 0] = u_ram.des_str.buffer[31];
u_ram.des_str.worka[ 1] = u_ram.des_str.buffer[ 0];
u_ram.des_str.worka[ 2] = u_ram.des_str.buffer[ 1];
u_ram.des_str.worka[ 3] = u_ram.des_str.buffer[ 2];
u_ram.des_str.worka[ 4] = u_ram.des_str.buffer[ 3];
u_ram.des_str.worka[ 5] = u_ram.des_str.buffer[ 4];
u_ram.des_str.worka[ 6] = u_ram.des_str.buffer[ 3];
u_ram.des_str.worka[ 7] = u_ram.des_str.buffer[ 4];
u_ram.des_str.worka[ 8] = u_ram.des_str.buffer[ 5];
u_ram.des_str.worka[ 9] = u_ram.des_str.buffer[ 6];
u_ram.des_str.worka[10] = u_ram.des_str.buffer[ 7];
u_ram.des_str.worka[11] = u_ram.des_str.buffer[ 8];
u_ram.des_str.worka[12] = u_ram.des_str.buffer[ 7];
u_ram.des_str.worka[13] = u_ram.des_str.buffer[ 8];
u_ram.des_str.worka[14] = u_ram.des_str.buffer[ 9];
u_ram.des_str.worka[15] = u_ram.des_str.buffer[10];
u_ram.des_str.worka[16] = u_ram.des_str.buffer[11];
u_ram.des_str.worka[17] = u_ram.des_str.buffer[12];
u_ram.des_str.worka[18] = u_ram.des_str.buffer[11];
u_ram.des_str.worka[19] = u_ram.des_str.buffer[12];
u_ram.des_str.worka[20] = u_ram.des_str.buffer[13];
u_ram.des_str.worka[21] = u_ram.des_str.buffer[14];
u_ram.des_str.worka[22] = u_ram.des_str.buffer[15];
u_ram.des_str.worka[23] = u_ram.des_str.buffer[16];
u_ram.des_str.worka[24] = u_ram.des_str.buffer[15];
u_ram.des_str.worka[25] = u_ram.des_str.buffer[16];
u_ram.des_str.worka[26] = u_ram.des_str.buffer[17];
u_ram.des_str.worka[27] = u_ram.des_str.buffer[18];
u_ram.des_str.worka[28] = u_ram.des_str.buffer[19];
u_ram.des_str.worka[29] = u_ram.des_str.buffer[20];
u_ram.des_str.worka[30] = u_ram.des_str.buffer[19];
u_ram.des_str.worka[31] = u_ram.des_str.buffer[20];
u_ram.des_str.worka[32] = u_ram.des_str.buffer[21];
u_ram.des_str.worka[33] = u_ram.des_str.buffer[22];
u_ram.des_str.worka[34] = u_ram.des_str.buffer[23];
u_ram.des_str.worka[35] = u_ram.des_str.buffer[24];
u_ram.des_str.worka[36] = u_ram.des_str.buffer[23];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -