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

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

?? des.cpp

?? des加密算法 des加密算法 des加密算法 解密
?? 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[]="I am 030603116 ";
	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一区二区三区免费野_久草精品视频
精品av久久707| 91婷婷韩国欧美一区二区| 欧美三区在线视频| 亚洲欧美日韩人成在线播放| 不卡av在线网| 亚洲欧美一区二区不卡| 色偷偷成人一区二区三区91| 亚洲另类在线制服丝袜| 91啪在线观看| 亚洲国产精品自拍| 日韩欧美成人一区| 国产精品一二三| 中文成人av在线| 不卡视频免费播放| 亚洲超丰满肉感bbw| 欧美一级高清片| 国产精品中文字幕欧美| 综合av第一页| 欧美巨大另类极品videosbest| 日本视频中文字幕一区二区三区| 久久色在线视频| www.66久久| 日日夜夜一区二区| 久久久综合网站| 91美女蜜桃在线| 日韩va欧美va亚洲va久久| 久久久久久久精| 欧美影院一区二区三区| 青青草国产精品亚洲专区无| 久久一夜天堂av一区二区三区| 成人激情图片网| 亚洲www啪成人一区二区麻豆 | 亚洲一区免费视频| 欧美一区二区精品在线| 粉嫩av一区二区三区| 亚洲一区免费视频| 久久久噜噜噜久久中文字幕色伊伊| 成人av网站免费观看| 日韩综合小视频| 中文字幕的久久| 欧美一区二区三区公司| 成人av免费在线| 蜜桃av一区二区在线观看| 亚洲女同一区二区| 精品区一区二区| 欧美视频一区二| 国产成人亚洲综合a∨婷婷| 亚洲福利国产精品| 亚洲欧美影音先锋| 欧美tk—视频vk| 欧美性猛交xxxx黑人交| 成人午夜免费av| 精品一区二区在线看| 亚洲资源中文字幕| 国产精品美女久久久久久久网站| 51精品视频一区二区三区| 972aa.com艺术欧美| 精品制服美女丁香| 视频一区视频二区中文字幕| 一区二区三区在线观看视频| 国产色一区二区| 欧美va亚洲va香蕉在线| 欧美日韩亚洲综合在线| 亚洲一区二区在线免费观看视频| 一本在线高清不卡dvd| 国产一区二区三区蝌蚪| 日韩极品在线观看| 亚洲精品国产无天堂网2021| 日本一区二区三区高清不卡| 日韩欧美国产成人一区二区| 欧美日韩另类一区| 在线免费亚洲电影| 色天天综合久久久久综合片| 99久久777色| www.66久久| 99精品久久只有精品| 成人福利电影精品一区二区在线观看| 国产一区二区电影| 国产激情偷乱视频一区二区三区| 久久99久国产精品黄毛片色诱| 日韩av电影天堂| 免费欧美高清视频| 蜜桃91丨九色丨蝌蚪91桃色| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲天堂av一区| 亚洲欧洲在线观看av| 国产精品剧情在线亚洲| 国产精品久久久久久久午夜片| 欧美高清一级片在线观看| 国产日韩欧美a| 亚洲午夜久久久久中文字幕久| 一区二区三区四区五区视频在线观看 | 久久久久久久免费视频了| 欧美白人最猛性xxxxx69交| 欧美电影免费观看高清完整版在线观看 | 午夜久久久影院| 亚洲高清三级视频| 麻豆91免费观看| 国产精品一品二品| 91最新地址在线播放| 色乱码一区二区三区88| 欧美三级资源在线| 在线成人小视频| 2023国产精品| 亚洲免费av观看| 天堂va蜜桃一区二区三区| 精品中文字幕一区二区| 成人毛片在线观看| 欧美午夜免费电影| 精品国产伦理网| 国产精品免费视频一区| 亚洲影视在线观看| 狠狠色丁香久久婷婷综合_中| 成人性生交大片免费| 欧美日韩在线观看一区二区| 精品99999| 中文字幕中文在线不卡住| 亚洲妇熟xx妇色黄| 韩国成人在线视频| 在线观看日韩av先锋影音电影院| 91麻豆精品国产91久久久更新时间| 精品国产乱码久久久久久1区2区| **性色生活片久久毛片| 视频一区二区三区在线| 国产91露脸合集magnet| 欧美日韩亚洲综合| 国产精品网站导航| 日日嗨av一区二区三区四区| 丁香婷婷深情五月亚洲| 欧美日韩第一区日日骚| 国产欧美一区视频| 亚洲超碰精品一区二区| 成人av综合一区| 日韩免费视频一区| 亚洲国产一区二区在线播放| 国产大陆a不卡| 欧美精品日韩一本| 亚洲天堂网中文字| 国产成人精品影视| 精品日韩在线一区| 亚洲一区视频在线| 成人av网站大全| 久久久精品中文字幕麻豆发布| 亚洲成年人影院| 91网站最新网址| 精品99一区二区| 日本欧美一区二区三区| 欧美三区免费完整视频在线观看| 综合欧美一区二区三区| 国产伦精品一区二区三区免费迷| 欧美一区二区三区电影| 亚洲国产视频网站| 91丨国产丨九色丨pron| 欧美激情一区二区三区在线| 蜜臀久久99精品久久久久久9| 欧洲亚洲精品在线| 国产精品久久久久久久久免费丝袜| 精品一区二区在线看| 日韩限制级电影在线观看| 午夜a成v人精品| 欧美调教femdomvk| 亚洲电影在线免费观看| 一本到不卡免费一区二区| 国产精品二三区| 成人av电影免费观看| 国产精品久久777777| 国产·精品毛片| 中文字幕av一区二区三区| 国产精品一区二区在线观看不卡| 日韩欧美123| 九色综合狠狠综合久久| 精品91自产拍在线观看一区| 精品中文av资源站在线观看| 精品999在线播放| 91精品一区二区三区久久久久久| 亚洲国产色一区| 欧美理论在线播放| 天天综合网 天天综合色| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲成人av一区二区| 91国在线观看| 丝袜亚洲另类欧美综合| 欧美日韩精品一区二区天天拍小说 | ...xxx性欧美| 日本丰满少妇一区二区三区| 亚洲另类在线制服丝袜| 欧美日韩你懂得| 美女尤物国产一区| 国产婷婷色一区二区三区| 91婷婷韩国欧美一区二区| 亚洲一区二区三区四区在线| 欧美疯狂做受xxxx富婆| 黄网站免费久久| 中文字幕在线不卡一区| 欧美怡红院视频| 久久精品国产色蜜蜜麻豆| 久久久不卡影院| 欧美在线三级电影| 蜜臀av性久久久久蜜臀av麻豆| 久久亚洲二区三区|