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

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

?? cryptogram.cpp

?? 3des算法進行加解密并使用MD5進行相關簽名算法
?? CPP
字號:
// cryptogram.cpp: implementation of the Ccryptogram class.
//
//////////////////////////////////////////////////////////////////////
#include "memory.h"
#include "md5.h"
#include "cryptogram.h"
#include "d3des.h"
#define   CREPTY_VER   0x01 
/* 函數說明:這個函數是產生簽名的時候調用
 * 參數說明:wPlainLen   :明文長度
 *			 pbyPlain    :指向明文的指針
 *			 wSignLen    :簽名長度
 *			 pbySign     :指向簽名的指針
 *	返回值: 0x00 :成功
 *	         0x01 :作簽名失敗
 *			 0x02 :存放簽名的空間太小
 *
 */
unsigned char  TFCA_CreatSign(unsigned short wPlainLen, unsigned char *pbyPlain,
							  unsigned short wSignLen, unsigned char *pbySign)
{
	if(wSignLen < 16)
		return 0x02;
	if(TFCA_MD5(pbyPlain,wPlainLen,pbySign) != 0x00)
		return 0x01;
	return 0x00;
}

/* 函數說明:這個函數是驗證簽名的時候調用
 * 參數說明:wPlainLen   :明文長度
 *			 pbyPlain    :指向明文的指針
 *			 wSignLen    :簽名長度
 *			 pbySign     :指向簽名的指針
 *	返回值: 0x00 :簽名有效
 *	         0x01 :作簽無效
 *			 0x02 : 其它錯誤
 */
unsigned char  TFCA_VerifySign(unsigned short wPlainLen, unsigned char *pbyPlain,
							   unsigned short wSignLen, unsigned char *pbySign)
{
	unsigned char NewSing[16] = {0};
	if(wSignLen != 16)
		return 0x01;
	if(TFCA_CreatSign(wPlainLen,pbyPlain,16,NewSing) != 0)
		return  0x02;
	for(int i = 0; i < 16 ;i++)
	{
		if(pbySign[i] != NewSing[i])
			return 0x01;
	}
	return 0x00;
}
bool DES(bool bEnspot, bool bTriDES,  unsigned char* pbyKey,int nLength, unsigned char* pbySource, unsigned char* pbyTarget)
{
	if(nLength==0 || nLength%8)
		return false;
	int section = nLength/8;
	if(bTriDES){
		des2key(pbyKey,bEnspot?EN0:DE1);
		for(int i = 0 ;i<section;i++)
			Ddes(pbySource+8*i,pbyTarget+8*i);
	}
	else{
		deskey(pbyKey,bEnspot?EN0:DE1);
		for(int i = 0 ;i<section;i++)
			des(pbySource+8*i,pbyTarget+8*i);
	}
	return true;
}
unsigned char  TFCA_Encrypt(unsigned char byKeyType,unsigned short wKeyLen,
							unsigned char *pbyKey,unsigned short wPlainLen, unsigned char *pbyPlain,
						    unsigned short *pwEncryptLen, unsigned char *pbyEncrypt)
{
	int wFillLen = 0;

	wFillLen = ((wPlainLen + 16)) % 64;
	if(wFillLen > 0)
		wFillLen = 64 - wFillLen;
	if(byKeyType == 0x00)
	{
		if(wKeyLen != 16)
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x03;
		}
		
		if((*pwEncryptLen) < (wPlainLen + 16 + wFillLen))
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x02;
		}
		/*首先附加簽名*/
		memcpy(pbyEncrypt , pbyPlain , wPlainLen );
		for(int i = 0 ; i < wFillLen; i++)
			pbyEncrypt[wPlainLen + i] = 0xf0;

		wPlainLen += wFillLen;
		if(TFCA_CreatSign(wPlainLen,pbyEncrypt,16,&pbyEncrypt[wPlainLen]) != 0x00)
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x01;
		}
		wPlainLen += 16;
		if(!DES(true,true,pbyKey,wPlainLen,pbyEncrypt,pbyEncrypt))
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x04;
		}
	}
	else if(byKeyType == 0x01)
	{
		if(wKeyLen != 8)
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x03;
		}
		
		if((*pwEncryptLen) < (wPlainLen + 16 + wFillLen))
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x02;
		}
		/*首先附加簽名*/
		memcpy(pbyEncrypt , pbyPlain , wPlainLen );
		for(int i = 0 ; i < wFillLen; i++)
			pbyEncrypt[wPlainLen + i] = 0xf0;

		wPlainLen += wFillLen;
		if(TFCA_CreatSign(wPlainLen,pbyEncrypt,16,&pbyEncrypt[wPlainLen]) != 0x00)
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x01;
		}
		wPlainLen += 16;
		if(!DES(true,false,pbyKey,wPlainLen,pbyEncrypt,pbyEncrypt))
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x04;
		}
	}
	else
	{
		if((*pwEncryptLen) < (wPlainLen + 16))
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x02;
		}
		/*首先附加簽名*/
		memcpy(pbyEncrypt , pbyPlain , wPlainLen );
		if(TFCA_CreatSign(wPlainLen,pbyEncrypt,16,&pbyEncrypt[wPlainLen]) != 0x00)
		{
			memset(pbyEncrypt, 0 ,*pwEncryptLen);
			*pwEncryptLen = 0x00;
			return 0x01;
		}
		wPlainLen += 16;;
	}
	*pwEncryptLen = wPlainLen;
	return 0x00;
}


unsigned char  TFCA_Decrypt(unsigned char byEncrypVer,unsigned char byKeyType,unsigned short wKeyLen,
							unsigned char *pbyKey,unsigned short *pwPlainLen, unsigned char *pbyPlain,
						    unsigned short wEncryptLen, unsigned char *pbyEncrypt)
{
	bool   bIsRootKet = false;
	if(byEncrypVer != CREPTY_VER)
	{
		*pwPlainLen = 0;
		return 0x01;
	}

	if(byKeyType == 0x00)
	{/*根密鑰*/
		bIsRootKet = true;
		if(wKeyLen != 16)
		{
			*pwPlainLen = 0;
			return 0x03;
		}
	}
	else if(byKeyType == 0x01)
	{/*會話密鑰*/
		if(wKeyLen != 8)
		{
			*pwPlainLen = 0;
			return 0x03;
		}
	}
	else/*不加密*/
	{
		if((*pwPlainLen) < wEncryptLen)
		{
			*pwPlainLen = 0;
			return 0x03;
		}
		*pwPlainLen = wEncryptLen;
		memcpy(pbyPlain,pbyEncrypt,wEncryptLen);
		(*pwPlainLen) = wEncryptLen-16;
		if(TFCA_VerifySign(*pwPlainLen,pbyPlain,16,&pbyPlain[*pwPlainLen]) != 0 )
		{
			*pwPlainLen = 0;
			return 0x02;
		}
		return 0x00;
	}

	if((*pwPlainLen) < wEncryptLen)
	{
		*pwPlainLen = 0;
		return 0x03;
	}

	if(!DES(false,bIsRootKet,pbyKey,wEncryptLen,pbyEncrypt,pbyPlain) != 0)
	{
		*pwPlainLen = 0;
		return 0x04;
	}
	if(wEncryptLen <= 16)
	{
		*pwPlainLen = 0;
		return 0x05;
	}
	(*pwPlainLen) = wEncryptLen-16;
	if(TFCA_VerifySign(*pwPlainLen,pbyPlain,16,&pbyPlain[*pwPlainLen]) != 0 )
	{
		*pwPlainLen = 0;
		return 0x02;
	}
	return 0x00;
}

unsigned char  TFCA_GetVer()
{
	return CREPTY_VER;
}

unsigned long  MCoef_32[2]={0xE7BD2160,0xDA3A2A9C};
// 兩個小m序列系數

// dwMset: 隨機發生器所使用的小m序列
// dwKey: 隨機數種子
// nNumber: 產生的隨機序列長度(以DWORD為單位)
// pdwRandom: 指向隨機數存儲空間的指針
// return value: 運算完成之后隨機數發生器的狀態
unsigned long  m_Seq_32_m(unsigned long  dwMset,unsigned long  dwKey,int nNumber, unsigned long  * pdwRandom)
{
_asm
	{
		CLD
		MOV EDI,pdwRandom;
		MOV ECX,nNumber;
		MOV ESI,dwMset;
		MOV EAX,dwKey;
		ALIGN 4
		LOOP_CIRCLE1:
		PUSH ECX
		MOV ECX,32
		LOOP_CIRCLE2:
		MOV EBX,EAX;
		SHL EAX,1
		AND EBX,ESI; //select the bit for xor
		MOV EDX,EBX;
		BSWAP EBX;
		XOR BX,DX;
		XOR BH,BL; // because P only judge one byte
		// so must XOR to judge the p of whole word
		JP NEXT //jp equals the xor
		INC EAX
		NEXT: DEC ecx
		JNZ LOOP_CIRCLE2
		POP ECX
		STOSD
		DEC ECX
		JNZ LOOP_CIRCLE1
		MOV dwKey,EAX
	}
	return dwKey;
}

// 產生長度為nLength字節的隨機數
// Buffer: 指向隨機數存放區域的指針
// nLength: 產生隨機數數量
void RandomGenerator(unsigned char * Buffer, int nlength)
{
	unsigned long  A;
	unsigned char B[4];
	_asm
	{
		_emit 0x0f
		_emit 0x31
		MOV A,EAX
	}
	A=m_Seq_32_m(MCoef_32[0],A,nlength/4,(unsigned long*)Buffer);
	if(nlength%4!=0)
	{
		m_Seq_32_m(MCoef_32[0],A,1,(unsigned long*)B);
		memcpy(Buffer+(nlength/4)*4,B,nlength%4);
	}
	return;
} 
unsigned char  TFCA_CreateKey(unsigned short *pwKeyLen,unsigned char *pKey)
{
	if(*pwKeyLen < 8)
		return 0x02;
	*pwKeyLen = 8;
	RandomGenerator(pKey,*pwKeyLen);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩激情一区二区| 成人午夜av在线| 国产不卡免费视频| 欧美自拍偷拍一区| 久久影院视频免费| 亚洲女性喷水在线观看一区| 久久成人免费日本黄色| 91免费观看视频| 国产色91在线| 麻豆成人91精品二区三区| 91麻豆免费看片| 久久久精品黄色| 美腿丝袜亚洲三区| 欧美色综合影院| 最新热久久免费视频| 韩国三级电影一区二区| 欧美高清你懂得| 一区二区三区不卡视频| av电影在线观看不卡| 国产午夜亚洲精品午夜鲁丝片| 日本中文字幕一区| 欧美日韩一区二区在线观看 | 91丨九色丨尤物| 高清成人免费视频| 久久av老司机精品网站导航| 国产精品自产自拍| 色偷偷成人一区二区三区91| 欧美日韩一区在线观看| 精品区一区二区| 《视频一区视频二区| 亚洲高清免费观看 | xnxx国产精品| 中文字幕日韩欧美一区二区三区| 亚洲另类在线制服丝袜| 日韩高清国产一区在线| 大尺度一区二区| 精品视频在线视频| 欧美激情一区二区三区蜜桃视频| 亚洲欧美日韩电影| 美女精品自拍一二三四| av在线这里只有精品| 欧美理论片在线| 国产精品灌醉下药二区| 人人狠狠综合久久亚洲| 色综合中文字幕| 久久久精品人体av艺术| 婷婷激情综合网| 一片黄亚洲嫩模| 99久久久久久| 亚洲一区二区免费视频| 欧美精品黑人性xxxx| 久久精品国产成人一区二区三区| 精品国产乱码久久久久久免费| 国产一级精品在线| 国产精品久久久久影院色老大| 91在线视频18| 亚洲成人动漫在线免费观看| 国产一区二区三区在线观看精品| 国产精品自拍毛片| 成人18精品视频| 中文字幕一区av| 欧美色爱综合网| 久久成人麻豆午夜电影| 国产精品二区一区二区aⅴ污介绍| 色综合天天性综合| 天堂久久久久va久久久久| 精品国产乱码久久久久久久久| 老司机精品视频在线| 国产精品青草综合久久久久99| 97se亚洲国产综合自在线不卡| 午夜精品久久久久久| 久久综合九色综合97婷婷 | 欧美一区二区三区免费| 国产精品一区二区不卡| 一区二区三区四区五区视频在线观看| 欧美精品视频www在线观看| 国产乱色国产精品免费视频| 亚洲日本成人在线观看| 欧美sm美女调教| 色婷婷综合久久久久中文一区二区| 日本成人在线不卡视频| 亚洲欧美影音先锋| 精品免费国产一区二区三区四区| 91麻豆高清视频| 国产一区二区影院| 香蕉影视欧美成人| 亚洲色图丝袜美腿| 久久久777精品电影网影网 | 欧美日韩一区三区四区| caoporm超碰国产精品| 免费av网站大全久久| 一区二区三区av电影| 欧美激情综合在线| 日韩美一区二区三区| 午夜在线成人av| 色吊一区二区三区| 亚洲v中文字幕| 91精品国产麻豆| 国内精品第一页| 国产精品福利在线播放| 欧美性猛交xxxx乱大交退制版 | 六月婷婷色综合| 中文字幕不卡一区| 在线观看精品一区| 美日韩一区二区三区| 欧美极品美女视频| 欧美在线一区二区三区| 七七婷婷婷婷精品国产| 日本一区二区在线不卡| 在线欧美日韩国产| 琪琪久久久久日韩精品| 国产精品天干天干在观线| 欧美日韩国产首页| 国产在线精品一区在线观看麻豆| 国产精品毛片a∨一区二区三区| 欧美在线观看一区二区| 国产在线不卡一卡二卡三卡四卡| 亚洲婷婷综合色高清在线| 欧美精品一级二级三级| 国产suv精品一区二区6| 亚洲国产中文字幕| 国产精品欧美综合在线| 在线播放视频一区| 不卡av在线免费观看| 久久精品国产77777蜜臀| 亚洲欧美日韩一区二区 | 亚洲精选免费视频| 日韩精品一区二区三区在线| 91网页版在线| 国产999精品久久| 日韩福利电影在线观看| 一区二区三区在线播放| 久久蜜桃av一区二区天堂 | 国产激情视频一区二区三区欧美 | 欧美一区二区视频在线观看| 成人动漫一区二区在线| 九色综合狠狠综合久久| 五月综合激情日本mⅴ| 国产精品国产三级国产aⅴ原创| 精品国产成人系列| 日韩午夜在线影院| 欧美日韩三级视频| 在线免费av一区| 91丨九色porny丨蝌蚪| 成人黄色a**站在线观看| 国产揄拍国内精品对白| 捆绑紧缚一区二区三区视频 | 久久久综合九色合综国产精品| 欧美日韩成人一区| 欧美日韩视频第一区| 欧美日韩日日骚| 欧美日韩日日摸| 777xxx欧美| 日韩午夜精品视频| 日韩欧美一卡二卡| 欧美mv日韩mv亚洲| 久久久天堂av| 久久久三级国产网站| 国产日本一区二区| 国产精品久久久爽爽爽麻豆色哟哟| 国产日本亚洲高清| 国产精品久久久久久久久快鸭| 国产三级一区二区| 国产精品福利一区二区三区| 国产精品国产三级国产aⅴ原创 | 国产在线不卡一卡二卡三卡四卡| 久久精品国产澳门| 韩国视频一区二区| 成人精品电影在线观看| 高潮精品一区videoshd| 不卡电影免费在线播放一区| av在线不卡免费看| 欧美亚洲动漫另类| 欧美精品 国产精品| 精品国产髙清在线看国产毛片| 欧美videos大乳护士334| 国产精品美女久久久久aⅴ | 色婷婷av久久久久久久| 欧美专区日韩专区| 欧美一区二区三区免费在线看| 91精品国产麻豆国产自产在线| 欧美精品一区在线观看| 中文在线资源观看网站视频免费不卡| 国产精品欧美一区二区三区| 亚洲曰韩产成在线| 久久国产精品99精品国产| 国产成人av电影在线观看| 一区二区三区影院| 亚洲成av人片一区二区三区| 在线免费精品视频| 欧美绝品在线观看成人午夜影视| 欧美一区二区视频在线观看| 久久久99免费| 亚洲国产成人av网| 久久国产生活片100| 91在线免费看| 精品福利一区二区三区| 亚洲综合在线五月| 国产精品一区二区久久不卡| 欧美色倩网站大全免费|