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

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

?? des.cpp

?? DES加密程序.比較好!可以進(jìn)行二次開發(fā)!
?? CPP
字號(hào):

/*
    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
};

// 擴(kuò)展置換表
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
};

// 每輪移動(dòng)的位數(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è)計(jì)
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標(biāo)志
static char Tmp[256], deskey[16];

/*
static void DES(char Out[8], char In[8], const PSubKey pSubKey, bool Type);//標(biāo)準(zhǔn)DES加/解密
static void SetKey(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)的長(zhǎng)度 >= ((datalen+7)/8)*8,即比datalen大的且是8的倍數(shù)的最小正整數(shù)
// In 可以= Out,此時(shí)加/解密后將覆蓋輸入緩沖區(qū)(In)的內(nèi)容
// 當(dāng)keylen>8時(shí)系統(tǒng)自動(dòng)使用3次DES加/解密,否則使用標(biāo)準(zhǔn)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ù)的實(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ù)的實(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ù)的實(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 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加解密函數(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ù)(可以對(duì)長(zhǎng)明文分段加密)
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()
{
	// 密鑰設(shè)置
	char key[]={0,2,1,0,9,4,5,1,7,8,5,0,7,2,8};
    // 設(shè)置明文
	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);

	
    // 進(jìn)行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();
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品污网站| 日韩av不卡在线观看| 久久久久久久久伊人| 91精品国产综合久久香蕉麻豆| 91在线精品一区二区| 国产99久久久国产精品免费看| 国产麻豆日韩欧美久久| 麻豆91在线看| 国产一区二区三区不卡在线观看| 亚洲成a人片综合在线| 天天影视色香欲综合网老头| 一区二区三区不卡在线观看| 亚洲色图丝袜美腿| 亚洲精品五月天| 亚洲免费av观看| 一级中文字幕一区二区| 亚洲精品精品亚洲| 亚洲成a人v欧美综合天堂| 亚洲国产精品自拍| 一区二区日韩av| 天堂蜜桃91精品| 香蕉久久一区二区不卡无毒影院| 天天影视网天天综合色在线播放| 日韩高清不卡一区二区| 国产精品久久久久7777按摩| 亚洲丝袜另类动漫二区| 日韩美女精品在线| 亚洲大片一区二区三区| 亚洲成a人v欧美综合天堂下载 | 欧美在线播放高清精品| 欧美亚洲动漫制服丝袜| 99视频精品全部免费在线| 欧日韩精品视频| 欧美乱熟臀69xxxxxx| 久久人人超碰精品| 中文字幕不卡的av| 亚洲男人的天堂在线观看| 亚洲一区二区三区四区在线| 性做久久久久久免费观看| 久久福利资源站| 中文字幕亚洲欧美在线不卡| 国产精品国模大尺度视频| 中文文精品字幕一区二区| 国产欧美日韩卡一| 亚洲一区在线播放| 日韩国产精品久久久| 精品一区二区三区免费观看 | 久久99热99| 国产精品亚洲人在线观看| 久久品道一品道久久精品| 欧美国产禁国产网站cc| 亚洲免费高清视频在线| 久久福利视频一区二区| 91在线视频免费观看| 日韩一区二区视频在线观看| 国产亚洲人成网站| 亚洲福利国产精品| 久久99国产精品免费网站| 精品在线播放午夜| 一本色道亚洲精品aⅴ| 欧美嫩在线观看| 国产清纯在线一区二区www| 亚洲人成在线播放网站岛国| 九九国产精品视频| 欧美精品久久一区| 精品国产一区二区三区不卡 | 在线精品观看国产| 欧美一区二区视频在线观看2022| 久久久国产精华| 国产精品国产自产拍在线| 久久99精品一区二区三区三区| 国产精品69毛片高清亚洲| 欧美久久久久免费| 国产精品久久久久永久免费观看| 麻豆成人91精品二区三区| 91捆绑美女网站| 国产视频一区在线播放| 亚洲sss视频在线视频| 91尤物视频在线观看| 欧美一级高清大全免费观看| 国产精品国产自产拍高清av| 国产在线不卡一卡二卡三卡四卡| 色噜噜狠狠色综合欧洲selulu| 欧美激情中文不卡| 日本视频中文字幕一区二区三区| 91精品91久久久中77777| 久久久久久久久岛国免费| 亚洲欧美国产77777| 成人精品一区二区三区四区| 欧美一区二区免费视频| 亚洲成人黄色影院| 91视频精品在这里| 国产精品你懂的| 久久99久久久久久久久久久| 欧美午夜精品久久久久久超碰| 中文字幕在线不卡国产视频| 久久se精品一区二区| 欧美电影免费观看高清完整版在线| 亚洲激情图片一区| 高清不卡在线观看| 久久中文娱乐网| 蜜桃精品视频在线观看| 在线免费不卡电影| 久久99精品国产.久久久久 | 亚洲一区二区综合| 99国产一区二区三精品乱码| 1024成人网| 成人免费不卡视频| 中文av一区特黄| 成人白浆超碰人人人人| 欧美韩日一区二区三区四区| 国产河南妇女毛片精品久久久| 日韩你懂的在线观看| 国产自产2019最新不卡| 精品久久久久久久久久久久久久久久久 | 免费成人av在线| 精品国产免费视频| 黑人巨大精品欧美黑白配亚洲| 欧美日韩一区二区三区四区| 日韩激情av在线| 欧美久久久久免费| 久久99久久精品| 久久综合五月天婷婷伊人| 国产精品99久久久久久似苏梦涵 | 国产精品一区不卡| 亚洲国产精华液网站w| 国产大陆a不卡| 欧美成人video| 懂色av一区二区三区免费看| 国产目拍亚洲精品99久久精品| www.成人网.com| 亚洲毛片av在线| 欧美一区二区三区日韩视频| 久久er99精品| 综合电影一区二区三区| 在线免费观看一区| 亚洲桃色在线一区| 91麻豆精品国产91久久久久久 | 成人激情小说网站| 国产精品久久久久天堂| 一本大道久久a久久精二百| 日韩在线一二三区| 亚洲精品一区在线观看| 99vv1com这只有精品| 亚洲午夜激情av| 精品sm捆绑视频| 成人国产视频在线观看| 日韩精品乱码免费| 久久久久综合网| 精品视频一区三区九区| 国内精品嫩模私拍在线| 日韩久久久久久| 91视视频在线观看入口直接观看www| 一区二区三区精品| 337p日本欧洲亚洲大胆精品 | 99re视频这里只有精品| 天天影视色香欲综合网老头| 精品少妇一区二区三区在线视频 | 欧美久久一二区| 成人激情av网| 天天综合天天综合色| 亚洲欧洲日韩av| 91精品一区二区三区久久久久久 | 91网站最新地址| 免费观看成人av| 最新国产精品久久精品| 日韩欧美区一区二| eeuss鲁片一区二区三区| 蜜桃一区二区三区四区| 国产精品女主播av| 精品国产麻豆免费人成网站| 色吧成人激情小说| 国产成人亚洲综合a∨婷婷图片| 一区二区三区在线不卡| 欧美视频第二页| 久久99九九99精品| 亚洲一区二区三区中文字幕 | 国产精品一区二区x88av| 日韩国产高清在线| 中文字幕在线不卡一区二区三区| www国产成人| 欧美天堂一区二区三区| 99久久婷婷国产综合精品| 日本欧美一区二区在线观看| 一区二区三区视频在线看| www国产成人免费观看视频 深夜成人网| 欧美色图天堂网| av激情综合网| 亚洲人午夜精品天堂一二香蕉| 99re热这里只有精品视频| 国产美女主播视频一区| 三级欧美韩日大片在线看| 亚洲人成网站色在线观看| 国产网红主播福利一区二区| 欧美色精品在线视频| 丁香另类激情小说| 久久精品久久精品| 婷婷成人激情在线网| 亚洲欧美日韩电影| 国产精品视频yy9299一区|