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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? des.cpp

?? 一個加解密程序
?? CPP
字號:
#include "stdafx.h"
#include "stdlib.h"
#include <memory.h>
#include "DES.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
};

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

// S盒設(shè)計
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 SetDESKey(const char* Key, int len);// 設(shè)置密鑰
static void SetSubKey(PSubKey pSubKey, const char Key[8]);// 設(shè)置子密鑰
static void F_func(bool In[32], const bool Ki[48]);// f 函數(shù)
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);// 循環(huán)左移
static void ByteToBit(bool *Out, const char *In, int bits);// 字節(jié)組轉(zhuǎn)換成位組
static void BitToByte(char *Out, const bool *In, int bits);// 位組轉(zhuǎn)換成字節(jié)組


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

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

// 比特轉(zhuǎn)換函數(shù)
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);
}

// 變換函數(shù)
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);
}

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

// 輪轉(zhuǎn)函數(shù)
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函數(shù)的實現(xiàn)
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函數(shù)的實現(xiàn)
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);
}



// 設(shè)置子密鑰
void SetSubKey(PSubKey pSubKey, const char Key[8])
{
    static bool K[64], *KL=&K[0], *KR=&K[28];
    ByteToBit(K, Key, 64); //轉(zhuǎn)換格式
    Transform(K, K, PCK_Table, 56); 
	// 由56位密鑰產(chǎn)生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); 
    }
}


// 設(shè)置密鑰
void SetDESKey(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加解密函數(shù)
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]); // 調(diào)用F函數(shù)
            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加解密函數(shù)(可以對長明文分段加密)
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;
	SetDESKey(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()
{
	// 密鑰設(shè)置
	char key[]={0,2,1,0,9,4,5,1,7,8,5,0,7,2,8};
    // 設(shè)置明文
	char plain_text[100]={0};
	int  len1;
//	printf("\n請輸入一個明文:\n");
//	scanf("%s",plain_text);
	gets(plain_text);
    len1 = strlen(plain_text );
 	printf("\nDES加密前的明文:\n");
	printf("%s\n\n",plain_text);
   printf( "\n明文的長度為:%d\n",len1 );	
	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\n\n",decrypt_text); 
//	getchar();
}
*/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲地区一二三色| 久久久久9999亚洲精品| 国产一区二区女| 激情久久五月天| 国内精品免费**视频| 91豆麻精品91久久久久久| 欧美在线观看你懂的| 欧美日本一区二区在线观看| 欧美久久免费观看| 欧美电视剧免费全集观看| 久久精品日韩一区二区三区| 国产精品久久久久久久裸模| 国产精品毛片久久久久久久| 亚洲免费观看在线观看| 午夜激情久久久| 国产伦理精品不卡| 制服丝袜在线91| 欧美极品美女视频| 亚洲综合丁香婷婷六月香| 日韩国产欧美在线播放| 国产成人精品在线看| 欧美色欧美亚洲另类二区| 日韩欧美一区二区久久婷婷| 亚洲成在人线免费| 在线观看国产91| 国产精品精品国产色婷婷| 国产一区二区三区最好精华液| 欧美日韩黄色一区二区| 亚洲视频一区二区在线| 亚洲第一电影网| 欧美三级中文字幕在线观看| 亚洲一区二区三区国产| 欧美性猛片aaaaaaa做受| 亚洲精品一区二区三区在线观看| 国产精品私房写真福利视频| 国产精品77777| 欧美高清一级片在线| 性感美女极品91精品| 在线91免费看| 男人的天堂久久精品| 91性感美女视频| 欧美哺乳videos| 亚洲综合视频网| 欧美少妇xxx| 日本不卡视频一二三区| 精品国产一区二区三区四区四| 国产精品一区不卡| 国产精品区一区二区三区| 91女人视频在线观看| 亚洲国产精品自拍| 91丨九色porny丨蝌蚪| 亚洲乱码国产乱码精品精98午夜| 国产精品一品二品| 国产精品久久久久久久久果冻传媒| 91蜜桃在线免费视频| 亚洲123区在线观看| 欧美精品一区二区三区久久久 | 一区二区三区四区中文字幕| 国产精品一区二区三区99| 国产精品激情偷乱一区二区∴| 欧美午夜在线一二页| 国产一区二区不卡在线| 成人免费在线视频| 99精品热视频| 中文字幕一区二区三区在线播放 | 日本不卡视频一二三区| 日本一区二区在线不卡| 国产麻豆精品theporn| 最新国产精品久久精品| 欧美乱熟臀69xxxxxx| 国产一区免费电影| 一级做a爱片久久| 欧美成人一区二区三区片免费| 成人一区二区三区在线观看| 国产午夜亚洲精品不卡| 欧美三级电影在线看| 国产一区二区视频在线| 亚洲一区二区在线免费观看视频| 日韩一区二区中文字幕| 美女国产一区二区| 久久综合丝袜日本网| 国产一区二区免费视频| 亚洲一区在线免费观看| 久久久久久日产精品| 欧美色综合天天久久综合精品| 激情综合色综合久久综合| 久久嫩草精品久久久久| 欧美在线一二三| 国产98色在线|日韩| 亚洲欧美在线高清| 精品国产一区二区三区久久影院| 欧洲av在线精品| 国产高清不卡二三区| 天天综合网天天综合色| 亚洲视频在线一区| 日本一区二区三级电影在线观看| 91精品在线观看入口| 一本大道久久精品懂色aⅴ| 丝袜亚洲另类丝袜在线| 337p日本欧洲亚洲大胆精品| 欧美精品第1页| 欧美性欧美巨大黑白大战| 91麻豆国产精品久久| 成人的网站免费观看| 日本视频中文字幕一区二区三区| 一区二区三区在线播放| 国产精品久久久久久妇女6080| 精品国产伦一区二区三区观看体验 | 国产精品麻豆欧美日韩ww| 久久午夜电影网| 国产亚洲精品7777| 欧美国产丝袜视频| 中日韩av电影| 国产精品久久久久婷婷| 国产精品久久久久久久久晋中| 国产视频一区在线播放| 国产三级久久久| 国产精品久久毛片| 一区二区三区在线免费播放| 亚洲精品免费在线| 一区二区三区久久| 日本最新不卡在线| 韩国欧美一区二区| 成人av一区二区三区| 色婷婷亚洲婷婷| 欧美蜜桃一区二区三区| 日韩欧美国产wwwww| 精品粉嫩超白一线天av| 国产亚洲视频系列| 成人免费小视频| 亚洲成人av资源| 激情文学综合网| 91视频在线观看免费| 欧美日精品一区视频| 日韩欧美的一区二区| 国产欧美视频在线观看| 一区二区三区电影在线播| 美国十次了思思久久精品导航| 国产99久久久精品| 欧美日韩亚洲另类| 久久久久国产精品麻豆ai换脸| 中文字幕亚洲成人| 日韩激情一区二区| 成人av影视在线观看| 欧美男人的天堂一二区| 国产清纯白嫩初高生在线观看91 | 日韩电影在线看| 国产一区二区三区国产| 91性感美女视频| 日韩女优视频免费观看| 国产精品二三区| 偷窥少妇高潮呻吟av久久免费| 加勒比av一区二区| 欧美中文字幕一二三区视频| 日韩视频在线永久播放| 中文字幕在线不卡视频| 日本视频一区二区三区| 91美女精品福利| 亚洲精品一区二区三区精华液| 亚洲欧洲日韩一区二区三区| 日本中文字幕一区| 色婷婷狠狠综合| 久久综合九色综合欧美就去吻 | 亚洲欧美日韩国产一区二区三区| 日韩va欧美va亚洲va久久| 成人激情免费视频| 日韩欧美色综合| 午夜激情一区二区| 日本道色综合久久| 久久久国产午夜精品| 日韩成人午夜精品| 欧美亚洲尤物久久| 国产精品毛片高清在线完整版| 另类欧美日韩国产在线| 国产精品综合在线视频| 欧美日韩国产一级二级| 日韩码欧中文字| 国产盗摄精品一区二区三区在线| 日韩一区二区免费电影| 亚洲五月六月丁香激情| 色综合亚洲欧洲| 日韩欧美一级二级三级| 性做久久久久久| 91九色最新地址| 一区二区三区久久| 色欧美日韩亚洲| 一区二区高清视频在线观看| 91丨porny丨户外露出| 成人欧美一区二区三区1314| 成人激情综合网站| 国产亚洲成年网址在线观看| 经典三级视频一区| 精品国产亚洲在线| 精品影院一区二区久久久| 欧美一区二区国产| 1024成人网| 91视频免费看| 一区二区三区在线视频观看58| 91国偷自产一区二区三区观看| 亚洲欧美色图小说|