亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? des.cpp

?? “網絡安全技術實踐與代碼詳解”實例代碼
?? CPP
字號:

/*
    Provided by wangjunchuan, Northeastern University 
*/
#include <stdio.h>
#include <memory.h>
#include <string.h>

// 初始置換表
const static char IP_Table[64] = {
	58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
	62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
	57, 49, 41, 33, 25, 17,  9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
    61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};

// 逆初始置換表
const static char IPR_Table[64] = {
	40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31,
	38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
    36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
	34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41,  9, 49, 17, 57, 25
};

// 擴展置換表
static const char Extension_Table[48] = {
	32,  1,  2,  3,  4,  5,  4,  5,  6,  7,  8,  9,
	 8,  9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17,
	16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25,
	24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32,  1
};

// P盒置換表
const static char P_Table[32] = {
	16, 7, 20, 21, 29, 12, 28, 17, 1,  15, 23, 26, 5,  18, 31, 10,
	2,  8, 24, 14, 32, 27, 3,  9,  19, 13, 30, 6,  22, 11, 4,  25
};

// 密鑰置換表 
const static char PCK_Table[56] = {
	57, 49, 41, 33, 25, 17,  9,  1, 58, 50, 42, 34, 26, 18,
	10,  2, 59, 51, 43, 35, 27, 19, 11,  3, 60, 52, 44, 36,
	63, 55, 47, 39, 31, 23, 15,  7, 62, 54, 46, 38, 30, 22,
	14,  6, 61, 53, 45, 37, 29, 21, 13,  5, 28, 20, 12,  4
};

// 壓縮置換表 
const static char PCC_Table[48] = {
	14, 17, 11, 24,  1,  5,  3, 28, 15,  6, 21, 10,
	23, 19, 12,  4, 26,  8, 16,  7, 27, 20, 13,  2,
	41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48,
	44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
};

// 每輪移動的位數 
const static char LOOP_Table[16] = {
	1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
};

// S盒設計
const static char S_Box[8][4][16] = {
	// S盒1 
	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,
	// S盒2 
    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,
	// S盒3 
    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,
	// S盒4 
     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,
	// S盒5 
     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,
	// S盒6 
    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,
	// S盒7 
     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,
	// S盒8 
    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
};

typedef bool    (*PSubKey)[16][48];
enum    {ENCRYPT,DECRYPT};
static bool SubKey[2][16][48];// 16圈子密鑰
static bool Is3DES;// 3次DES標志
static char Tmp[256], deskey[16];

/*
static void DES(char Out[8], char In[8], const PSubKey pSubKey, bool Type);//標準DES加/解密
static void SetKey(const char* Key, int len);// 設置密鑰
static void SetSubKey(PSubKey pSubKey, const char Key[8]);// 設置子密鑰
static void F_func(bool In[32], const bool Ki[48]);// f 函數
static void S_func(bool Out[32], const bool In[48]);// S 盒代替
static void Transform(bool *Out, bool *In, const char *Table, int len);// 變換
static void Xor(bool *InA, const bool *InB, int len);// 異或
static void RotateL(bool *In, int len, int loop);// 循環左移
static void ByteToBit(bool *Out, const char *In, int bits);// 字節組轉換成位組
static void BitToByte(char *Out, const bool *In, int bits);// 位組轉換成字節組


// Type—ENCRYPT:加密,DECRYPT:解密
// 輸出緩沖區(Out)的長度 >= ((datalen+7)/8)*8,即比datalen大的且是8的倍數的最小正整數
// In 可以= Out,此時加/解密后將覆蓋輸入緩沖區(In)的內容
// 當keylen>8時系統自動使用3次DES加/解密,否則使用標準DES加/解密.超過16字節后只取前16字節
bool DES_Act(char *Out,char *In,long datalen,const char *Key,int keylen,bool Type = ENCRYPT);
*/

// 字節轉換函數
void ByteToBit(bool *Out, const char *In, int bits)
{
    for(int i=0; i<bits; ++i)
        Out[i] = (In[i>>3]>>(i&7)) & 1;
}

// 比特轉換函數
void BitToByte(char *Out, const bool *In, int bits)
{
    memset(Out, 0, bits>>3);
    for(int i=0; i<bits; ++i)
        Out[i>>3] |= In[i]<<(i&7);
}

// 變換函數
void Transform(bool *Out, bool *In, const char *Table, int len)
{
    for(int i=0; i<len; ++i)
        Tmp[i] = In[ Table[i]-1 ];
    memcpy(Out, Tmp, len);
}

// 異或函數的實現
void Xor(bool *InA, const bool *InB, int len)
{
    for(int i=0; i<len; ++i)
        InA[i] ^= InB[i];
}

// 輪轉函數
void RotateL(bool *In, int len, int loop)
{
    memcpy(Tmp, In, loop);
    memcpy(In, In+loop, len-loop);
    memcpy(In+len-loop, Tmp, loop);
}

// S函數的實現
void S_func(bool Out[32], const bool In[48])
{
    for(char i=0,j,k; i<8; ++i,In+=6,Out+=4) {
        j = (In[0]<<1) + In[5];
        k = (In[1]<<3) + (In[2]<<2) + (In[3]<<1) + In[4];
		ByteToBit(Out, &S_Box[i][j][k], 4);
    }
}

// F函數的實現
void F_func(bool In[32], const bool Ki[48])
{
    static bool MR[48];
    Transform(MR, In, Extension_Table, 48);
    Xor(MR, Ki, 48);
    S_func(In, MR);
    Transform(In, In, P_Table, 32);
}



// 設置子密鑰
void SetSubKey(PSubKey pSubKey, const char Key[8])
{
    static bool K[64], *KL=&K[0], *KR=&K[28];
    ByteToBit(K, Key, 64); //轉換格式
    Transform(K, K, PCK_Table, 56); 
	// 由56位密鑰產生48位子密鑰
    for(int i=0; i<16; ++i) {
        RotateL(KL, 28, LOOP_Table[i]);
        RotateL(KR, 28, LOOP_Table[i]);
        Transform((*pSubKey)[i], K, PCC_Table, 48); 
    }
}


// 設置密鑰
void SetKey(const char* Key, int len)
{
	memset(deskey, 0, 16);
	memcpy(deskey, Key, len>16?16:len);
	SetSubKey(&SubKey[0], &deskey[0]);
	Is3DES = len>8 ? (SetSubKey(&SubKey[1], &deskey[8]), true) : false;
}

// DES加解密函數
void DES(char Out[8], char In[8], const PSubKey pSubKey, bool Type)
{
    static bool M[64], tmp[32], *Li=&M[0], *Ri=&M[32];
    ByteToBit(M, In, 64);
    Transform(M, M, IP_Table, 64);
    if( Type == ENCRYPT ){
        for(int i=0; i<16; ++i) {
            memcpy(tmp, Ri, 32);
            F_func(Ri, (*pSubKey)[i]); // 調用F函數
            Xor(Ri, Li, 32);
            memcpy(Li, tmp, 32);
        }
    }else{
        for(int i=15; i>=0; --i) {
            memcpy(tmp, Li, 32);
            F_func(Li, (*pSubKey)[i]);
            Xor(Li, Ri, 32);
            memcpy(Ri, tmp, 32);
        }
	}
    Transform(M, M, IPR_Table, 64);
    BitToByte(Out, M, 64);
}

// DES加解密函數(可以對長明文分段加密)
bool DES_Act(char *Out, char *In, long datalen, const char *Key, int keylen, bool Type)
{
    if( !( Out && In && Key && (datalen=(datalen+7)&0xfffffff8) ) ) 
		return false;
	SetKey(Key, keylen);
	if( !Is3DES ) {   // 1次DES
		for(long i=0,j=datalen>>3; i<j; ++i,Out+=8,In+=8)
			DES(Out, In, &SubKey[0], Type);
	} else{   // 3次DES 加密:加(key0)-解(key1)-加(key0) 解密::解(key0)-加(key1)-解(key0)
		for(long i=0,j=datalen>>3; i<j; ++i,Out+=8,In+=8) {
			DES(Out, In,  &SubKey[0], Type);
			DES(Out, Out, &SubKey[1], !Type);
			DES(Out, Out, &SubKey[0], Type);
		}
	}
	return true;
}









void main()
{
	// 密鑰設置
	char key[]={0,2,1,0,9,4,5,1,7,8,5,0,7,2,8};
    // 設置明文
	char plain_text[]=" Welcome to DES world! It is wonderful! ";
	char encrypt_text[255]; // 密文
	char decrypt_text[255]; // 解密文

	memset(encrypt_text,0,sizeof(encrypt_text));
	memset(decrypt_text,0,sizeof(decrypt_text));

	printf("\nDES加密前的明文:\n");
	printf("%s\n\n",plain_text);

	
    // 進行DES加密
	DES_Act(encrypt_text, plain_text, sizeof(plain_text), key, sizeof(key), ENCRYPT);
	printf("\nDES加密后的密文:\n");
	printf("%s\n\n",encrypt_text);

	DES_Act(decrypt_text, encrypt_text, sizeof(plain_text), key, sizeof(key), DECRYPT);
	printf("\n解密后的輸出:\n");
	printf("%s",decrypt_text);

	getchar();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲嫩草精品久久| 国精产品一区一区三区mba桃花| 99久精品国产| 一区二区三区在线视频免费| 欧美撒尿777hd撒尿| 日韩av中文在线观看| 亚洲精品在线观看网站| 久久99精品国产麻豆不卡| 久久久久久电影| 成人av手机在线观看| 亚洲影院理伦片| 日韩一区二区免费高清| 国产乱码精品一区二区三区av| 国产精品高潮呻吟| 欧美日韩亚州综合| 国产乱码字幕精品高清av| 国产精品国产自产拍高清av| 欧美色图第一页| 激情五月婷婷综合| 欧美系列亚洲系列| 亚洲第一激情av| 久久久久久免费| 在线观看日韩一区| 精品亚洲成av人在线观看| 亚洲老司机在线| 精品福利一区二区三区免费视频| 久久久久久久久99精品| 91福利在线观看| 九九国产精品视频| 一区二区免费看| 久久久久久亚洲综合| 欧美视频精品在线观看| 国产成人精品www牛牛影视| 亚洲伊人色欲综合网| 久久精品一区二区三区不卡| 欧美性色黄大片手机版| 成人午夜在线免费| 麻豆视频一区二区| 亚洲国产日韩精品| 亚洲国产精品高清| 日韩一级视频免费观看在线| 91看片淫黄大片一级| 精品制服美女丁香| 日韩福利电影在线| 亚洲欧美另类综合偷拍| 国产欧美一区二区精品秋霞影院| 欧美三级电影精品| 91免费看视频| 成人三级在线视频| 国内精品伊人久久久久av影院| 五月激情综合色| 福利电影一区二区三区| 免费成人在线视频观看| 亚洲高清免费在线| 亚洲精品菠萝久久久久久久| 国产清纯在线一区二区www| 91麻豆精品国产自产在线| 色噜噜狠狠色综合中国| 成人性生交大片免费看在线播放| 精品在线视频一区| 久久不见久久见免费视频1| 亚洲第一主播视频| 性久久久久久久久| 亚洲18女电影在线观看| 亚洲电影一区二区| 夜夜嗨av一区二区三区四季av| 亚洲女人的天堂| 亚洲激情图片小说视频| 亚洲精品中文字幕乱码三区| 亚洲国产精品自拍| 国产欧美一区二区精品久导航| 欧美大片一区二区三区| 日韩欧美中文字幕公布| 日韩欧美国产三级电影视频| 日韩欧美高清dvd碟片| 日韩精品专区在线影院重磅| 91精品免费在线| 日韩视频一区二区三区| 日韩欧美区一区二| xnxx国产精品| 国产亚洲欧洲一区高清在线观看| 国产亚洲女人久久久久毛片| 国产亚洲美州欧州综合国| 日韩欧美国产麻豆| 久久久综合精品| 国产精品久久久久影视| 一区二区三区四区乱视频| 亚洲一区在线观看视频| 日本欧美在线观看| 国产一区二区三区最好精华液| 国产精品中文字幕日韩精品| 粉嫩在线一区二区三区视频| 色综合一区二区| 欧美日韩在线播放| 日韩视频免费观看高清完整版在线观看 | 粉嫩aⅴ一区二区三区四区| 成人中文字幕电影| 91蜜桃婷婷狠狠久久综合9色| 欧美午夜精品久久久久久超碰| 91精品国产综合久久国产大片| 日韩三级免费观看| 欧美国产欧美综合| 亚洲国产综合91精品麻豆| 日本成人在线电影网| 国产老肥熟一区二区三区| 91同城在线观看| 欧美日韩国产美女| 国产日韩欧美制服另类| 亚洲欧美色图小说| 久久99精品国产麻豆婷婷洗澡| www.在线成人| 欧美一级日韩一级| 亚洲欧美在线aaa| 日韩精品视频网| 成人av中文字幕| 91精品国产一区二区三区| 国产精品视频线看| 亚洲无线码一区二区三区| 国内精品国产成人国产三级粉色| 91麻豆精品一区二区三区| 日韩久久免费av| 亚洲一区在线播放| 粉嫩av一区二区三区| 欧美日韩aaaaa| 亚洲日穴在线视频| 激情综合网最新| 欧美日韩中文字幕精品| 国产日韩av一区| 日本va欧美va瓶| 91福利在线看| 国产精品美女久久久久aⅴ| 蜜桃免费网站一区二区三区| 色哦色哦哦色天天综合| 欧美精品一区二区三区很污很色的| 中文字幕一区二区三| 狠狠v欧美v日韩v亚洲ⅴ| 欧美色综合网站| 中文字幕在线观看不卡视频| 久久99久久精品| 欧美色图免费看| 亚洲欧美国产毛片在线| 成人涩涩免费视频| 久久久99久久| 精品一区二区三区视频在线观看| 欧美日韩国产一区二区三区地区| 国产精品妹子av| 国产乱淫av一区二区三区| 日韩欧美第一区| 青青草原综合久久大伊人精品 | 国产欧美一区二区精品忘忧草| 奇米色一区二区| 欧美酷刑日本凌虐凌虐| 有码一区二区三区| 丁香天五香天堂综合| 久久久久久久久久久久电影| 亚洲综合激情网| 国产成人av一区二区三区在线 | 欧美性一区二区| 亚洲欧美日韩成人高清在线一区| 成人免费的视频| 国产精品久线在线观看| 国产激情一区二区三区四区| 精品国精品自拍自在线| 美脚の诱脚舐め脚责91| 欧美一级黄色片| 美女脱光内衣内裤视频久久影院| 91精品国产色综合久久ai换脸| 五月综合激情网| 91精品午夜视频| 美女视频黄a大片欧美| 日韩视频一区二区| 国产在线乱码一区二区三区| 日韩欧美高清dvd碟片| 激情五月激情综合网| 久久一区二区视频| 国产精品91xxx| 国产精品视频yy9299一区| 99热99精品| 亚洲国产成人91porn| 欧美日韩国产综合草草| 久久精品国内一区二区三区| 精品国产91九色蝌蚪| 丁香婷婷综合色啪| 又紧又大又爽精品一区二区| 欧美久久久影院| 久久精品国产成人一区二区三区| 久久精品无码一区二区三区| 91浏览器入口在线观看| 亚洲国产日韩在线一区模特| 日韩女优电影在线观看| 国产成人av一区二区三区在线| 亚洲免费av观看| 日韩午夜激情视频| 成人av在线资源网| 丝袜诱惑亚洲看片| 国产亚洲一区二区三区四区| 日本乱人伦aⅴ精品| 精品一区二区三区久久久| 亚洲欧洲国产日本综合| 88在线观看91蜜桃国自产|