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

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

?? default.cpp

?? 使用C實現(xiàn)的300中常用加密算法
?? CPP
字號:
// default.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "default.h"
#include "cbc.h"
#include <time.h>
#include <memory>

NAMESPACE_BEGIN(CryptoPP)

static const unsigned int MASH_ITERATIONS = 200;
static const unsigned int SALTLENGTH = 8;
static const unsigned int BLOCKSIZE = Default_ECB_Encryption::BLOCKSIZE;
static const unsigned int KEYLENGTH = Default_ECB_Encryption::KEYLENGTH;

// The purpose of this function Mash() is to take an arbitrary length input
// string and *deterministicly* produce an arbitrary length output string such
// that (1) it looks random, (2) no information about the input is
// deducible from it, and (3) it contains as much entropy as it can hold, or
// the amount of entropy in the input string, whichever is smaller.

void Mash(byte *const in, word16 inLen, byte *out, word16 outLen, int iterations)
{
	unsigned int bufSize = (outLen-1+DefaultHashModule::DIGESTSIZE-((outLen-1)%DefaultHashModule::DIGESTSIZE));

	// ASSERT: bufSize == (the smallest multiple of DIGESTSIZE that is >= outLen)

	byte b[2];
	SecByteBlock buf(bufSize);
	SecByteBlock outBuf(bufSize);
	DefaultHashModule hash;

	unsigned int i;
	for(i=0; i<outLen; i+=DefaultHashModule::DIGESTSIZE)
	{
		b[0] = (byte) i >> 8;
		b[1] = (byte) i;
		hash.Update(b, 2);
		hash.Update(in, inLen);
		hash.Final(outBuf+i);
	}

	while (iterations-- > 1)
	{
		memcpy(buf, outBuf, bufSize);
		for (i=0; i<bufSize; i+=DefaultHashModule::DIGESTSIZE)
		{
			b[0] = (byte) i >> 8;
			b[1] = (byte) i;
			hash.Update(b, 2);
			hash.Update(buf, bufSize);
			hash.Final(outBuf+i);
		}
	}

	memcpy(out, outBuf, outLen);
}

static void GenerateKeyIV(const char *passphrase, const byte *salt, unsigned int saltLength, byte *key, byte *IV)
{
	unsigned int passphraseLength = strlen(passphrase);
	SecByteBlock temp(passphraseLength+saltLength);
	memcpy(temp, passphrase, passphraseLength);
	memcpy(temp+passphraseLength, salt, saltLength);
	SecByteBlock keyIV(KEYLENGTH+BLOCKSIZE);
	Mash(temp, passphraseLength + saltLength, keyIV, KEYLENGTH+BLOCKSIZE, MASH_ITERATIONS);
	memcpy(key, keyIV, KEYLENGTH);
	memcpy(IV, keyIV+KEYLENGTH, BLOCKSIZE);
}

// ********************************************************

DefaultEncryptor::DefaultEncryptor(const char *passphrase, BufferedTransformation *outQ)
	: Filter(outQ)
{
	assert(SALTLENGTH <= DefaultHashModule::DIGESTSIZE);
	assert(BLOCKSIZE <= DefaultHashModule::DIGESTSIZE);

	SecByteBlock salt(DefaultHashModule::DIGESTSIZE), keyCheck(DefaultHashModule::DIGESTSIZE);
	DefaultHashModule hash;

	// use hash(passphrase | time | clock) as salt
	hash.Update((byte *)passphrase, strlen(passphrase));
	time_t t=time(0);
	hash.Update((byte *)&t, sizeof(t));
	clock_t c=clock();
	hash.Update((byte *)&c, sizeof(c));
	hash.Final(salt);

	// use hash(passphrase | salt) as key check
	hash.Update((byte *)passphrase, strlen(passphrase));
	hash.Update(salt, SALTLENGTH);
	hash.Final(keyCheck);

	outQueue->Put(salt, SALTLENGTH);

	// mash passphrase and salt together into key and IV
	SecByteBlock key(KEYLENGTH);
	SecByteBlock IV(BLOCKSIZE);
	GenerateKeyIV(passphrase, salt, SALTLENGTH, key, IV);

	cipher.reset(new Default_ECB_Encryption(key));
	outQueue.reset(new CBCPaddedEncryptor(*cipher, IV, outQueue.release()));

	outQueue->Put(keyCheck, BLOCKSIZE);
}

void DefaultEncryptor::Put(byte inByte)
{
	outQueue->Put(inByte);
}

void DefaultEncryptor::Put(const byte *inString, unsigned int length)
{
	outQueue->Put(inString, length);
}

// ********************************************************

DefaultDecryptor::DefaultDecryptor(const char *p, BufferedTransformation *outQueue)
	: Filter(outQueue),
	  passphrase(strlen(p)+1),
	  salt(SALTLENGTH),
	  keyCheck(BLOCKSIZE)
{
	strcpy(passphrase, p);
	state = WAITING_FOR_KEYCHECK;
	count = 0;
}

void DefaultDecryptor::Put(byte inByte)
{
	if (state==WAITING_FOR_KEYCHECK)
	{
		assert (count < SALTLENGTH+BLOCKSIZE);

		if (count < SALTLENGTH)
			salt[count]=inByte;
		else
			keyCheck[count-SALTLENGTH]=inByte;

		if (++count == SALTLENGTH+BLOCKSIZE)
			CheckKey();
	}
	else
		outQueue->Put(inByte);
}

void DefaultDecryptor::Put(const byte *inString, unsigned int length)
{
	while (state==WAITING_FOR_KEYCHECK && length)
	{
		Put(*inString++);
		length--;
	}

	if (length)
		outQueue->Put(inString, length);
}

void DefaultDecryptor::CheckKey()
{
	SecByteBlock check(STDMAX((unsigned int)2*BLOCKSIZE, (unsigned int)DefaultHashModule::DIGESTSIZE));

	DefaultHashModule hash;
	hash.Update((byte *)passphrase.ptr, strlen(passphrase));
	hash.Update(salt, SALTLENGTH);
	hash.Final(check);

	SecByteBlock key(KEYLENGTH);
	SecByteBlock IV(BLOCKSIZE);
	GenerateKeyIV(passphrase, salt, SALTLENGTH, key, IV);

	cipher.reset(new Default_ECB_Decryption(key));
	std::auto_ptr<CBCPaddedDecryptor> decryptor(new CBCPaddedDecryptor(*cipher, IV));

	decryptor->Put(keyCheck, BLOCKSIZE);
	decryptor->ProcessBuf();
	decryptor->Get(check+BLOCKSIZE, BLOCKSIZE);

	if (memcmp(check, check+BLOCKSIZE, BLOCKSIZE))
		state = KEY_BAD;
	else
		state = KEY_GOOD;

	decryptor->Attach(outQueue.release());
	outQueue.reset(decryptor.release());
}

NAMESPACE_END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品999| 一本一道波多野结衣一区二区| 成人av在线影院| 91九色02白丝porn| 久久久久久久久久电影| 亚洲第一久久影院| 成人毛片在线观看| 精品国产91亚洲一区二区三区婷婷| 亚洲女女做受ⅹxx高潮| 国产精品一卡二| 日韩一区二区免费高清| 一区二区不卡在线播放| 国产不卡视频一区| 亚洲高清免费观看| 成人黄色777网| 国产三级欧美三级| 国产综合久久久久久鬼色| 欧美一级在线视频| 亚洲大型综合色站| 在线观看亚洲a| 亚洲女人****多毛耸耸8| 波多野结衣中文一区| 国产亚洲人成网站| 激情av综合网| 日韩一区二区麻豆国产| 日韩中文字幕91| 欧美日韩一级视频| 亚洲最新在线观看| 在线国产亚洲欧美| 亚洲黄色片在线观看| 91色.com| 一区二区免费看| 在线观看一区日韩| 性做久久久久久免费观看欧美| 在线看不卡av| 亚洲一区二区三区国产| 欧美色手机在线观看| 亚洲激情六月丁香| 欧美视频一区二区在线观看| 一区二区三区波多野结衣在线观看 | 欧美日本精品一区二区三区| 亚洲女爱视频在线| 欧美色国产精品| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲一级在线观看| 欧美性色黄大片手机版| 亚洲成人免费观看| 欧美一区二区在线视频| 狠狠色伊人亚洲综合成人| 久久伊人中文字幕| 成人久久视频在线观看| 一区二区在线观看视频| 欧美日韩精品综合在线| 另类欧美日韩国产在线| 欧美国产成人在线| 欧美综合久久久| 日本成人在线不卡视频| 久久久久久久久蜜桃| av在线一区二区| 亚洲成人自拍网| 久久亚洲一级片| 一本久久精品一区二区| 午夜精品久久一牛影视| 久久久久久久久久久黄色| 91福利视频网站| 经典三级一区二区| 国产福利精品一区| 亚洲精品老司机| 欧美成人三级在线| 99精品欧美一区二区蜜桃免费| 亚洲福利视频三区| 国产欧美日韩精品a在线观看| 91蜜桃在线观看| 青草国产精品久久久久久| 国产日韩av一区| 91精品国产综合久久香蕉的特点| 国产一区二区三区在线观看免费视频| 亚洲精品午夜久久久| 精品久久一区二区| 欧美日韩免费在线视频| 国产精品一级二级三级| 亚洲第一福利一区| 成人免费一区二区三区在线观看| 日韩久久免费av| 欧美日韩在线播放一区| 国产成人精品三级| 蜜臀国产一区二区三区在线播放 | www.日韩av| 韩国三级在线一区| 婷婷久久综合九色综合绿巨人| 国产视频视频一区| 日韩一级片在线播放| 在线观看亚洲成人| 99久久99久久精品免费看蜜桃| 六月丁香综合在线视频| 亚洲超丰满肉感bbw| 亚洲欧美国产三级| 国产女同互慰高潮91漫画| 精品国产自在久精品国产| 色中色一区二区| 成人不卡免费av| 国产乱国产乱300精品| 日本亚洲天堂网| 午夜电影网一区| 一级女性全黄久久生活片免费| 国产精品乱码一区二区三区软件 | 欧美va日韩va| 777午夜精品视频在线播放| 91久久国产最好的精华液| 91在线小视频| 99视频在线精品| 91蝌蚪porny| 色综合久久久久久久久久久| 成人黄色777网| 99免费精品视频| 99re在线视频这里只有精品| 粉嫩av一区二区三区| 丁香一区二区三区| 高潮精品一区videoshd| 国产99久久久国产精品潘金| 国产美女精品在线| 国产v日产∨综合v精品视频| 精品在线观看视频| 国产精选一区二区三区| 国产精品原创巨作av| 不卡的电影网站| 99久久免费国产| 在线观看一区日韩| 3d动漫精品啪啪一区二区竹菊 | 色妹子一区二区| 欧亚一区二区三区| 欧美精品一二三| 久久男人中文字幕资源站| 国产区在线观看成人精品| 国产精品久久久久aaaa| 亚洲精品成人精品456| 偷拍亚洲欧洲综合| 久久97超碰色| 91在线精品一区二区三区| 91国在线观看| 精品国产一区二区在线观看| 日本一区二区三区免费乱视频 | 国产精品萝li| 一区二区三区中文在线观看| 日韩在线一二三区| 国产精品亚洲一区二区三区妖精 | 99视频精品在线| 欧美巨大另类极品videosbest | 亚洲国产精品久久人人爱| 亚洲6080在线| 国产最新精品免费| 国产日韩欧美精品在线| 亚洲视频电影在线| 日韩av中文字幕一区二区| 国产黑丝在线一区二区三区| 色婷婷综合久久久久中文一区二区| 欧美色老头old∨ideo| 久久久久久久电影| 亚洲成人福利片| 成人综合婷婷国产精品久久免费| 欧美性大战久久久| 欧美激情艳妇裸体舞| 天堂久久一区二区三区| 国产aⅴ精品一区二区三区色成熟| 欧美中文字幕久久| 日本一区二区不卡视频| 婷婷激情综合网| 91在线国产观看| 久久久不卡影院| 全国精品久久少妇| 色婷婷av一区二区三区之一色屋| 欧美成人精精品一区二区频| 一区二区三区日韩欧美精品| 国产原创一区二区| 欧美喷潮久久久xxxxx| 国产精品成人免费精品自在线观看| 日韩1区2区3区| 在线观看精品一区| 1024亚洲合集| 成人做爰69片免费看网站| 精品国内二区三区| 日韩不卡在线观看日韩不卡视频| 91免费看`日韩一区二区| 久久精品男人天堂av| 蜜臀国产一区二区三区在线播放| 欧美性受极品xxxx喷水| 国产精品久久久久久妇女6080| 国产大陆精品国产| 精品久久人人做人人爰| 蜜桃av一区二区| 日韩欧美综合在线| 日本成人在线网站| 欧美一区二区三区性视频| 水蜜桃久久夜色精品一区的特点 | 懂色av一区二区三区蜜臀| 欧美www视频| 国产自产2019最新不卡| 日韩精品中文字幕在线一区| 美女视频黄 久久| 日韩精品中文字幕在线不卡尤物|