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

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

?? crypack.cpp

?? EJB,business logic 處理程序。 主要想找一點關(guān)于加密方面的程序。
?? CPP
字號:
// Crypack.cpp : DLL 傾僾儕働乕僔儑儞偺僄儞僩儕 億僀儞僩傪掕媊偟傑偡丅
//

#include "stdafx.h"
#include "Crypack.h"

#define BLOCK_LEN   16
#define READ_ERROR  -7
#define WRITE_ERROR -8

#ifdef LINUX
#define file_len(x) (unsigned long)x.__pos
#else
#define file_len(x) (unsigned long)x
#endif

#define BYTE_PER_CHARACTER ((CHAR_BIT + 3) / 4)

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

extern "C" __declspec(dllexport)
int FileEncrypt(char* FileIn, char* FileOut, char* Pass,
				 CallbackFunc* Callback, LPARAM lParam)
{
	int Result;
	char Pass1[17], Hex1[33], Hex2[33];
	char* Pass2;

	strncpy(Pass1, Pass, 16);

	if(strlen(Pass) > 16)
	{
		Pass1[16] = 0;
	}

	CharToHex(Hex1, Pass1);
	sprintf(Hex2, "%032s", Hex1);

	Pass2 = Hex2;

	Result = CodeFile(FileIn, FileOut, Pass2, 1, Callback, lParam);

	if(Result != 0)
	{
		::DeleteFile(FileOut);
	}

	return Result;
}

extern "C" __declspec(dllexport)
int FileDecrypt(char* FileIn, char* FileOut, char* Pass,
				 CallbackFunc* Callback, LPARAM lParam)
{
	int Result;
	char Pass1[17], Hex1[33], Hex2[33];
	char* Pass2;

	strncpy(Pass1, Pass, 16);

	if(strlen(Pass) > 16)
	{
		Pass1[16] = 0;
	}

	CharToHex(Hex1, Pass1);
	sprintf(Hex2, "%032s", Hex1);

	Pass2 = Hex2;

	Result = CodeFile(FileIn, FileOut, Pass2, 2, Callback, lParam);

	if(Result != 0)
	{
		::DeleteFile(FileOut);
	}

	return Result;
}

void CharToHex(char* m_cBuffer, char* m_cSource)
{
    char * src = m_cSource;
    size_t size, i;

	size = strlen(src);

    for (i = 0; i < size; ++i)
	{
		if(src[i] < 0)
		{
			src[i] = -src[i]; //慡妏暥帤張棟偺偨傔
		}

#if BYTE_PER_CHARACTER == 2
        m_cBuffer[i * 2] = "0123456789ABCDEF"[src[i] / 0x10];
        m_cBuffer[i * 2 + 1] = "0123456789ABCDEF"[src[i] % 0x10];
#else //1僶僀僩偑8價僢僩傛?zhèn)钁鍌珎垪潓n
        unsigned char data;
        int j;

        data = src[i];
        for (j = BYTE_PER_CHARACTER - 1; j >= 0; --j)
		{
            m_cBuffer[i * BYTE_PER_CHARACTER + j] = "0123456789ABCDEF"[data % 0x10];
            data /= 0x10;
        }
#endif
    }
    m_cBuffer[i * BYTE_PER_CHARACTER] = 0;
}

int CodeFile(char* m_cFileIn, char* m_cFileOut, 
			 char* m_cPass, int m_iType, 
			 CallbackFunc* Callback, LPARAM lParam)
{
	FILE *fin = 0, *fout = 0;
    char *cp, ch, key[32], *FileIn = m_cFileIn, *FileOut = m_cFileOut, *Pass = m_cPass;
    int i = 0, by = 0, key_len = 0, err = 0, m_iResult = 0;

	gen_tabs();

    cp = Pass;

    while(i < 64 && *cp)
    {
        ch = toupper(*cp++);
        if(ch >= '0' && ch <= '9')
            by = (by << 4) + ch - '0';
        else if(ch >= 'A' && ch <= 'F')
            by = (by << 4) + ch - 'A' + 10;
        else
        {
			m_iResult = 1;
        }

        if(i++ & 1)
            key[i / 2 - 1] = by & 0xff;
    }

    if(*cp)
    {
        m_iResult = 1;
    }
    else if(i < 32 || (i & 15))
    {
        m_iResult = 1;
    }

	if(m_iResult == 0)
	{
		key_len = i / 2;

		if(!(fin = fopen(FileIn, "rb")))
		{
			m_iResult = 2;
		}

		if(!(fout = fopen(FileOut, "wb")))
		{
			m_iResult = 2;
		}

		if(m_iResult == 0)
		{
			if(m_iType == 1)
			{
				aese.key((unsigned char*)key, key_len);
				err = EncodeFile(fin, fout, FileIn, FileOut, Callback, lParam);
			}
			else if(m_iType == 2)
			{
				aesd.key((unsigned char*)key, key_len);
				err = DecodeFile(fin, fout, FileIn, FileOut, Callback, lParam);
			}

			if(err == 0)
			{
				m_iResult = 0;
			}
			else if(err == READ_ERROR)
			{
				m_iResult = 2;
			}
			else if(err == WRITE_ERROR)
			{
				m_iResult = 2;
			}
		}
	}

	if(fout)
	{
        fclose(fout);
	}

	if(fin)
	{
		fclose(fin);
	}

	return m_iResult;
}

int EncodeFile(FILE* fin, FILE* fout, 
			   const char* ifn, const char* ofn, 
			   CallbackFunc* Callback, LPARAM lParam)
{
	char buf[BLOCK_LEN], dbuf[2 * BLOCK_LEN];
    fpos_t flen;
	int m_iProgress;
    unsigned long i, len, rlen, brlen;

	MSG message;

	m_iProgress = 0;

	if(Callback)
		Callback(m_iProgress, lParam);

    // set a random IV

    Fillrand(dbuf, BLOCK_LEN);

    // find the file length

    fseek(fin, 0, SEEK_END);
    fgetpos(fin, &flen);
    rlen = file_len(flen);
	brlen = file_len(flen);
    // reset to start
    fseek(fin, 0, SEEK_SET);

    if(rlen <= BLOCK_LEN)
    {   // if the file length is less than or equal to 16 bytes

        // read the bytes of the file into the buffer and verify length
        len = (unsigned long) fread(dbuf + BLOCK_LEN, 1, BLOCK_LEN, fin);
        rlen -= len;

        if(rlen > 0)
            return READ_ERROR;

        // pad the file bytes with zeroes
        for(i = len; i < BLOCK_LEN; ++i)
            dbuf[i + BLOCK_LEN] = 0;

        // xor the file bytes with the IV bytes
        for(i = 0; i < BLOCK_LEN; ++i)
            dbuf[i + BLOCK_LEN] ^= dbuf[i];

		m_iProgress = 50;

		if(Callback)
			Callback(m_iProgress, lParam);

        // encrypt the top 16 bytes of the buffer
		aese.encrypt((unsigned char*)dbuf + BLOCK_LEN, (unsigned char*)dbuf + len);

        len += BLOCK_LEN;
        // write the IV and the encrypted file bytes
        if(fwrite(dbuf, 1, len, fout) != len)
            return WRITE_ERROR;

		m_iProgress = 100;

		if(Callback)
			Callback(m_iProgress, lParam);
    }
    else
    {   // if the file length is more 16 bytes
        // write the IV
        if(fwrite(dbuf, 1, BLOCK_LEN, fout) != BLOCK_LEN)
            return WRITE_ERROR;

        // read the file a block at a time
        while(rlen > 0 && !feof(fin))
        {
			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // read a block and reduce the remaining byte count
            len = (unsigned long)fread(buf, 1, BLOCK_LEN, fin);
            rlen -= len;

			m_iProgress = (int)(((brlen-rlen)*50/brlen)*2);

			if(Callback)
				// Pass i and userData. If the callback
				// returns false, stop processing.
				if (!Callback(m_iProgress, lParam))
					return READ_ERROR;

            // verify length of block
            if(len != BLOCK_LEN)
                return READ_ERROR;

            // do CBC chaining prior to encryption
            for(i = 0; i < BLOCK_LEN; ++i)
                buf[i] ^= dbuf[i];

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // encrypt the block
			aese.encrypt((unsigned char*)buf, (unsigned char*)dbuf);

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // if there is only one more block do ciphertext stealing
            if(rlen > 0 && rlen < BLOCK_LEN)
            {
                // move the previous ciphertext to top half of double buffer
                // since rlen bytes of this are output last
                for(i = 0; i < BLOCK_LEN; ++i)
                    dbuf[i + BLOCK_LEN] = dbuf[i];

                // read last part of plaintext into bottom half of buffer
                if(fread(dbuf, 1, rlen, fin) != rlen)
                    return READ_ERROR;

                // clear the remainder of the bottom half of buffer
                for(i = 0; i < BLOCK_LEN - rlen; ++i)
                    dbuf[rlen + i] = 0;

                // do CBC chaining from previous ciphertext
                for(i = 0; i < BLOCK_LEN; ++i)
                    dbuf[i] ^= dbuf[i + BLOCK_LEN];

				if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
				{
					::TranslateMessage(&message);
					::DispatchMessage(&message);
				}

                // encrypt the final block
				aese.encrypt((unsigned char*)dbuf, (unsigned char*)dbuf);

				if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
				{
					::TranslateMessage(&message);
					::DispatchMessage(&message);
				}

                // set the length of the final write
                len = rlen + BLOCK_LEN; rlen = 0;
            }

            // write the encrypted block
            if(fwrite(dbuf, 1, len, fout) != len)
                return WRITE_ERROR;

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}
        }

		m_iProgress = 100;
    }

	if(Callback)
		Callback(m_iProgress, lParam);

    return 0;
}

int DecodeFile(FILE* fin, FILE* fout, 
			   const char* ifn, const char* ofn, 
			   CallbackFunc* Callback, LPARAM lParam)
{
	char buf1[BLOCK_LEN], buf2[BLOCK_LEN], dbuf[2 * BLOCK_LEN];
    char *b1, *b2, *bt;
    fpos_t flen;
	int m_iProgress;
    unsigned long i, len, rlen, brlen;

	MSG message;

	m_iProgress = 0;

	if(Callback)
		Callback(m_iProgress, lParam);

    // find the file length

    fseek(fin, 0, SEEK_END);
    fgetpos(fin, &flen);
    rlen = file_len(flen);
	brlen = file_len(flen);
    // reset to start
    fseek(fin, 0, SEEK_SET);

    if(rlen <= 2 * BLOCK_LEN)
    {   // if the original file length is less than or equal to 16 bytes

        // read the bytes of the file and verify length
        len = (unsigned long)fread(dbuf, 1, 2 * BLOCK_LEN, fin);
        rlen -= len;

        if(rlen > 0)
            return READ_ERROR;

        // set the original file length
        len -= BLOCK_LEN;

		m_iProgress = 50;

		if(Callback)
			Callback(m_iProgress, lParam);

        // decrypt from position len to position len + BLOCK_LEN
		aesd.decrypt((unsigned char*)dbuf + len, (unsigned char*)dbuf + BLOCK_LEN);

        // undo CBC chaining
        for(i = 0; i < len; ++i)
            dbuf[i] ^= dbuf[i + BLOCK_LEN];

        // output decrypted bytes
        if(fwrite(dbuf, 1, len, fout) != len)
            return WRITE_ERROR;

		m_iProgress = 100;

		if(Callback)
			Callback(m_iProgress, lParam);
    }
    else
    {   // we need two input buffers because we have to keep the previous
        // ciphertext block - the pointers b1 and b2 are swapped once per
        // loop so that b2 points to new ciphertext block and b1 to the
        // last ciphertext block

        rlen -= BLOCK_LEN; b1 = buf1; b2 = buf2;

        // input the IV
        if(fread(b1, 1, BLOCK_LEN, fin) != BLOCK_LEN)
            return READ_ERROR;

        // read the encrypted file a block at a time
        while(rlen > 0 && !feof(fin))
        {
			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // input a block and reduce the remaining byte count
            len = (unsigned long)fread(b2, 1, BLOCK_LEN, fin);
            rlen -= len;

			m_iProgress = (int)(((brlen-rlen)*50/brlen)*2);
			
			if(Callback)
				// Pass i and userData. If the callback
				// returns false, stop processing.
				if(!Callback(m_iProgress, lParam))
					return READ_ERROR;

            // verify the length of the read operation
            if(len != BLOCK_LEN)
                return READ_ERROR;

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // decrypt input buffer
			aesd.decrypt((unsigned char*)b2, (unsigned char*)dbuf);

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}

            // if there is only one more block do ciphertext stealing
            if(rlen > 0 && rlen < BLOCK_LEN)
            {
                // read last ciphertext block
                if(fread(b2, 1, rlen, fin) != rlen)
                    return READ_ERROR;

                // append high part of last decrypted block
                for(i = rlen; i < BLOCK_LEN; ++i)
                    b2[i] = dbuf[i];

                // decrypt last block of plaintext
                for(i = 0; i < rlen; ++i)
                    dbuf[i + BLOCK_LEN] = dbuf[i] ^ b2[i];

				if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
				{
					::TranslateMessage(&message);
					::DispatchMessage(&message);
				}

                // decrypt last but one block of plaintext
				aesd.decrypt((unsigned char*)b2, (unsigned char*)dbuf);

				if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
				{
					::TranslateMessage(&message);
					::DispatchMessage(&message);
				}

                // adjust length of last output block
                len = rlen + BLOCK_LEN; rlen = 0;
            }

            // unchain CBC using the last ciphertext block
            for(i = 0; i < BLOCK_LEN; ++i)
                dbuf[i] ^= b1[i];

            // write decrypted block
            if(fwrite(dbuf, 1, len, fout) != len)
                return WRITE_ERROR;

            // swap the buffer pointers
            bt = b1, b1 = b2, b2 = bt;

			if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
			{
				::TranslateMessage(&message);
				::DispatchMessage(&message);
			}		
		}
		
		m_iProgress = 100;
    }
	
	if(Callback)
		Callback(m_iProgress, lParam);

    return 0;
}

void Cycles(volatile unsigned __int64* rtn)
{
#if defined(_MSC_VER)
    __asm   // read the Pentium Time Stamp Counter
    {   cpuid
        rdtsc
        mov     ecx,rtn
        mov     [ecx],eax
        mov     [ecx+4],edx
        cpuid
    }
#else
  time_t tt;
  tt     = time(NULL);
  rtn[0] = tt;
  rtn[1] = tt & -36969l;
  return;
#endif
}

#define RAND(a,b) (((a = 36969 * (a & 65535) + (a >> 16)) << 16) + \
                    (b = 18000 * (b & 65535) + (b >> 16))  )

void Fillrand(char* buf, const int len)
{   
	static unsigned long a[2], mt = 1, count = 4;
    static char          r[4];
    int                  i;

    if(mt) { mt = 0; Cycles((unsigned __int64 *)a); }

    for(i = 0; i < len; ++i)
    {
        if(count == 4)
        {
            *(unsigned long*)r = RAND(a[0], a[1]);
            count = 0;
        }

        buf[i] = r[count++];
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频一区| 亚洲成a人片在线观看中文| 久热成人在线视频| 欧美一区二区三区视频免费| 午夜在线电影亚洲一区| 在线播放一区二区三区| 日日摸夜夜添夜夜添精品视频 | 国产麻豆视频一区二区| 欧美大胆一级视频| 国产一区二区三区免费在线观看 | 国产一区二区毛片| 国产人久久人人人人爽| 26uuu久久天堂性欧美| 九九精品一区二区| 亚洲国产成人在线| 91久久精品日日躁夜夜躁欧美| 亚洲欧美一区二区视频| 日本精品视频一区二区| 日韩二区三区四区| 久久久久9999亚洲精品| 日本乱人伦aⅴ精品| 日本成人在线视频网站| 国产欧美va欧美不卡在线| 91麻豆精东视频| 日韩电影一二三区| 中文字幕精品在线不卡| 欧美日韩专区在线| 国产一区二区免费视频| 亚洲影视资源网| 精品免费日韩av| 成人av动漫网站| 日韩av一二三| 中文字幕视频一区| 91精品国产高清一区二区三区 | 欧美国产日本韩| 欧美日韩精品免费| 国产成人精品亚洲午夜麻豆| 亚洲视频免费在线观看| 欧美va日韩va| 色婷婷av一区二区三区之一色屋| 免费观看91视频大全| 国产精品五月天| 欧美日韩dvd在线观看| 成人性生交大片免费看在线播放 | 一区av在线播放| 精品欧美一区二区在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 免费日韩伦理电影| 一区二区三区日韩| 国产精品午夜免费| 91精品国产综合久久蜜臀| 成年人国产精品| 激情文学综合网| 日产欧产美韩系列久久99| 国产精品久久久久影院亚瑟| 精品国产污污免费网站入口| 在线中文字幕一区| heyzo一本久久综合| 免费的成人av| 亚洲h动漫在线| 一区二区成人在线| 亚洲日本青草视频在线怡红院| 久久伊人中文字幕| 日韩精品一区在线| 91麻豆精品国产自产在线观看一区 | 2欧美一区二区三区在线观看视频| 日本精品视频一区二区| av不卡在线观看| 成人在线视频首页| 国产精品一区二区久久不卡| 久久成人免费电影| 麻豆久久久久久| 日韩福利视频网| 日本视频免费一区| 三级一区在线视频先锋| 亚洲小说欧美激情另类| 亚洲色欲色欲www| 中文字幕中文在线不卡住| 国产女同互慰高潮91漫画| 久久青草国产手机看片福利盒子| 在线播放亚洲一区| 日韩精品自拍偷拍| 日韩欧美亚洲一区二区| 日韩精品资源二区在线| 精品日韩在线一区| 久久蜜桃av一区精品变态类天堂 | 91浏览器入口在线观看| 91网站视频在线观看| 91久久精品国产91性色tv| 91精品办公室少妇高潮对白| 91激情五月电影| 欧美午夜影院一区| 8v天堂国产在线一区二区| 日韩欧美视频在线| 久久久精品欧美丰满| 亚洲国产精品传媒在线观看| 中文字幕中文在线不卡住| 一区二区三区在线影院| 亚洲国产精品视频| 日韩av电影天堂| 国产另类ts人妖一区二区| 成人avav影音| 中文字幕一区二区三区色视频| 中文字幕一区二区三区色视频| 亚洲黄色录像片| 日本最新不卡在线| 懂色一区二区三区免费观看| 91在线无精精品入口| 欧美日韩不卡在线| 久久精品一区四区| 亚洲免费在线观看| 丝袜美腿亚洲色图| 国产精品一区二区果冻传媒| 91在线porny国产在线看| 在线播放中文一区| 中文字幕av资源一区| 亚洲国产成人高清精品| 九一九一国产精品| 在线观看亚洲精品| 日韩欧美国产综合一区| 亚洲欧洲另类国产综合| 日韩影院在线观看| 波多野结衣亚洲一区| 欧美性大战久久久| 欧美激情一区二区在线| 午夜伦理一区二区| 不卡一区二区三区四区| 这里只有精品免费| 亚洲男女一区二区三区| 久久福利视频一区二区| 在线看不卡av| 337p日本欧洲亚洲大胆色噜噜| 亚洲在线成人精品| 丁香激情综合国产| 日韩三级电影网址| 亚洲尤物在线视频观看| 丰满少妇在线播放bd日韩电影| 欧美日韩美女一区二区| 综合欧美亚洲日本| 国产剧情在线观看一区二区| 欧美福利视频一区| 亚洲日本中文字幕区| 国产精品综合二区| 日韩精品综合一本久道在线视频| 亚洲在线观看免费| 91丨九色porny丨蝌蚪| 国产亚洲成aⅴ人片在线观看 | 91精品在线免费观看| 国产精品久久久久久久久免费丝袜| 日本伊人精品一区二区三区观看方式| 成人精品免费看| 精品久久久久久无| 日韩av高清在线观看| 欧美日韩大陆一区二区| 一区二区在线观看视频在线观看| 福利电影一区二区| 激情综合网天天干| 日韩一级大片在线观看| 视频在线观看一区二区三区| 91麻豆产精品久久久久久| 国产精品天天看| 风间由美一区二区av101| 久久精品综合网| 国产精品18久久久久久vr| 欧美videos中文字幕| 久久狠狠亚洲综合| 日韩三级视频在线观看| 麻豆国产欧美一区二区三区| 欧美二区三区的天堂| 午夜av区久久| 666欧美在线视频| 三级不卡在线观看| 欧美酷刑日本凌虐凌虐| 图片区日韩欧美亚洲| 欧美性xxxxxxxx| 天堂久久久久va久久久久| 91.麻豆视频| 日产欧产美韩系列久久99| 日韩视频在线一区二区| 黄一区二区三区| 国产视频一区二区在线| 成人丝袜18视频在线观看| 国产精品久久福利| 91在线视频免费观看| 一区二区三区欧美久久| 欧美视频精品在线观看| 无吗不卡中文字幕| 日韩一区二区三区精品视频| 国内精品免费**视频| 欧美国产日产图区| 日本精品视频一区二区| 日本中文字幕一区二区视频| 精品免费视频.| av中文字幕在线不卡| 一区二区高清免费观看影视大全| 欧美日韩国产一二三| 久久99精品国产麻豆婷婷| 中文字幕免费在线观看视频一区| 91老司机福利 在线| 午夜精品久久久久久久99樱桃|