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

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

?? default.cpp

?? 多個加解密程序的說明與源程序
?? 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一区二区三区免费野_久草精品视频
免费一区二区视频| 亚洲成人三级小说| 欧美一区二区三区男人的天堂| 99视频超级精品| 99久久久国产精品| 91小视频免费观看| 波多野结衣欧美| 97精品国产露脸对白| 精品视频1区2区| 在线视频欧美精品| 欧美日韩精品免费| 欧美一区二区三区四区五区| 欧美一区二区三区性视频| 日韩一级视频免费观看在线| 日韩欧美国产系列| 国产亚洲成aⅴ人片在线观看| 中文一区一区三区高中清不卡| 中文一区一区三区高中清不卡| 日韩美女视频一区| 亚洲高清免费视频| 精品在线免费视频| 国产成人高清视频| 91免费视频网址| 欧美日韩一二区| 日韩精品一区二区三区在线播放| 久久久精品人体av艺术| 国产精品你懂的在线欣赏| 玉米视频成人免费看| 天涯成人国产亚洲精品一区av| 精品一区二区三区蜜桃| 成人福利视频网站| 欧美日韩精品系列| 国产日韩欧美综合在线| 亚洲尤物视频在线| 精品午夜一区二区三区在线观看| 91亚洲国产成人精品一区二区三| 正在播放亚洲一区| 国产精品天美传媒| 日本aⅴ免费视频一区二区三区| 高清不卡在线观看av| 欧美性猛交一区二区三区精品| 日韩午夜在线影院| 亚洲精品成a人| 精品亚洲成av人在线观看| 在线欧美日韩精品| 国产免费成人在线视频| 日本在线不卡视频| 色婷婷综合久久| 国产亚洲欧美在线| 日韩精品一二三四| 在线中文字幕不卡| 亚洲国产精品传媒在线观看| 日韩精品一级中文字幕精品视频免费观看 | eeuss国产一区二区三区| 欧美精选一区二区| 一区在线播放视频| 国内精品第一页| 欧美绝品在线观看成人午夜影视| 国产欧美一区二区在线| 蜜臀91精品一区二区三区| 欧美一a一片一级一片| 最新日韩在线视频| 国产91色综合久久免费分享| 日韩午夜在线影院| 亚洲成人免费在线观看| 色婷婷精品大在线视频| 国产精品视频你懂的| 久久精品72免费观看| 91精品国产免费| 五月天欧美精品| 欧美精品在线视频| 午夜精品久久久久久久久| 色婷婷狠狠综合| 亚洲精品水蜜桃| 91亚洲精品一区二区乱码| 国产精品不卡在线| av资源站一区| 亚洲日本va午夜在线影院| 成人久久18免费网站麻豆 | 亚洲精品视频免费看| va亚洲va日韩不卡在线观看| 国产精品国产a| 99久精品国产| 一级做a爱片久久| 在线看日本不卡| 五月天视频一区| 精品国产免费久久 | 中文字幕亚洲成人| www.久久精品| 亚洲精品免费在线| 色香蕉久久蜜桃| 一区二区三区在线观看国产| 欧美艳星brazzers| 五月天中文字幕一区二区| 日韩精品一区二| 成人av网站大全| 亚洲成人福利片| 欧美电视剧在线看免费| 丁香另类激情小说| 亚洲一二三四在线| 日韩精品中文字幕一区二区三区 | 日本不卡中文字幕| 欧美一区午夜视频在线观看| 麻豆91免费观看| 国产精品免费视频观看| 精品视频123区在线观看| 精品一区精品二区高清| 国产精品免费看片| 4438成人网| 成人a级免费电影| 天天色 色综合| 国产精品私人自拍| 欧美日韩一区二区电影| 国产成人一级电影| 日韩—二三区免费观看av| 国产精品久久久久一区| 欧美精选一区二区| 国产成人小视频| 美女视频黄 久久| 亚洲欧美怡红院| 久久综合九色综合欧美就去吻 | 亚洲一区二区欧美日韩| 日韩亚洲欧美成人一区| 99精品偷自拍| 国产一区二区三区黄视频| 亚洲成人黄色影院| 成人免费在线观看入口| 久久嫩草精品久久久精品| 在线成人av网站| 在线观看成人小视频| 国产激情视频一区二区在线观看 | 欧美极品xxx| 91精品国产综合久久精品| 96av麻豆蜜桃一区二区| 国产麻豆日韩欧美久久| 麻豆久久一区二区| 亚洲.国产.中文慕字在线| 最新高清无码专区| 国产精品久久久久久亚洲毛片| 日韩网站在线看片你懂的| 欧美三级电影在线观看| 色婷婷久久久亚洲一区二区三区| 国产精品77777| 国产精品综合二区| 麻豆免费精品视频| 久久福利视频一区二区| 日韩电影免费在线看| 丝袜美腿亚洲一区| 日韩vs国产vs欧美| 日本视频中文字幕一区二区三区| 亚洲18色成人| 天堂在线一区二区| 蜜臀av一级做a爰片久久| 日韩电影一区二区三区四区| 日本va欧美va欧美va精品| 免费成人在线视频观看| 韩国欧美一区二区| 国产呦萝稀缺另类资源| 国产iv一区二区三区| 成人黄色777网| 97aⅴ精品视频一二三区| 91久久线看在观草草青青| 精品视频1区2区| 日韩免费高清电影| 久久综合九色综合久久久精品综合| 欧美成人a∨高清免费观看| 久久嫩草精品久久久精品一| 国产精品丝袜91| 亚洲精品水蜜桃| 婷婷六月综合网| 国内精品自线一区二区三区视频| 国产成人在线色| 91啦中文在线观看| 欧美区在线观看| 欧美成人在线直播| 欧美国产一区在线| 亚洲国产综合在线| 精品一二三四区| 99精品欧美一区| 91精品国产色综合久久不卡蜜臀 | av一二三不卡影片| 在线观看亚洲成人| 日韩欧美成人午夜| 中文字幕一区二区三区在线播放 | 奇米影视一区二区三区| 国产成人亚洲综合a∨猫咪| 色久优优欧美色久优优| 欧美va亚洲va在线观看蝴蝶网| 中文一区一区三区高中清不卡| 亚洲大型综合色站| 国产jizzjizz一区二区| 欧美片在线播放| 亚洲欧美怡红院| 国模无码大尺度一区二区三区| 99久久亚洲一区二区三区青草| 欧美一区二区三区四区高清| 中文字幕视频一区二区三区久| 蜜臂av日日欢夜夜爽一区| 91香蕉国产在线观看软件| 26uuu欧美|