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

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

?? default.cpp

?? #include "pch.h" #include "base64.h" NAMESPACE_BEGIN(CryptoPP) static const int MAX_LINE_LENG
?? 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一区二区三区免费野_久草精品视频
日av在线不卡| hitomi一区二区三区精品| 亚洲人成网站色在线观看| 久久精品亚洲乱码伦伦中文| 日韩免费视频线观看| 日韩视频在线永久播放| 欧美mv日韩mv亚洲| 久久品道一品道久久精品| 国产午夜精品一区二区三区视频 | 欧美日韩成人激情| 欧美精品少妇一区二区三区| 欧美肥大bbwbbw高潮| 91精品国产综合久久久蜜臀图片| 欧美一区二区三区播放老司机| 欧美一区二区高清| 国产亚洲制服色| 亚洲图片激情小说| 五月激情六月综合| 国内精品免费**视频| 成人午夜电影小说| 在线视频欧美区| 日韩限制级电影在线观看| 精品女同一区二区| 亚洲欧洲av在线| 亚洲成av人影院| 国产精品一区二区无线| 一本一本大道香蕉久在线精品 | 国产精品嫩草99a| 亚洲高清三级视频| 狠狠色丁香久久婷婷综| av成人免费在线观看| 7878成人国产在线观看| 国产亚洲综合av| 婷婷中文字幕综合| 成人综合日日夜夜| 欧美一区中文字幕| 国产精品高潮呻吟| 久久99国产精品久久99| 色老综合老女人久久久| 精品欧美乱码久久久久久1区2区| 亚洲视频一二三| 国内精品自线一区二区三区视频| 色欧美片视频在线观看| 国产欧美日韩另类视频免费观看| 亚洲成av人片一区二区梦乃| 成人免费观看男女羞羞视频| 91精品国模一区二区三区| 日韩一区有码在线| 国产成人综合在线播放| 欧美一区二区女人| 亚洲成a人v欧美综合天堂| 成人黄页在线观看| 精品国产一区二区国模嫣然| 亚洲精品成人少妇| 99久精品国产| 国产精品久久夜| 高清视频一区二区| 精品国产一区二区亚洲人成毛片| 亚洲国产成人av| 91久久奴性调教| 亚洲色图在线看| 不卡一区二区三区四区| 久久久久国产精品人| 久久国产精品72免费观看| 欧美精品一卡两卡| 天堂久久一区二区三区| 欧美日韩一二区| 一区二区三区在线观看动漫 | 亚洲成人久久影院| 色系网站成人免费| 一区二区在线观看av| 91蜜桃免费观看视频| 亚洲日本青草视频在线怡红院| 国产91色综合久久免费分享| 久久女同互慰一区二区三区| 久久69国产一区二区蜜臀| 日韩精品一区二区在线观看| 理论电影国产精品| 精品国产91乱码一区二区三区 | 精品视频免费在线| 日日摸夜夜添夜夜添国产精品 | 中文无字幕一区二区三区| 国产福利不卡视频| 国产欧美精品一区| 成人性色生活片免费看爆迷你毛片| 久久久无码精品亚洲日韩按摩| 国产一级精品在线| 国产精品乱人伦| 色一情一伦一子一伦一区| 亚洲国产精品久久艾草纯爱| 欧美一区二区三区不卡| 国产麻豆精品久久一二三| 国产欧美精品一区二区色综合朱莉| 成人av电影在线| 一二三区精品视频| 91精品国产综合久久精品app| 久久国产尿小便嘘嘘尿| 中文无字幕一区二区三区| 色猫猫国产区一区二在线视频| 午夜电影一区二区三区| 久久精品视频在线看| 色吊一区二区三区| 激情文学综合网| 亚洲视频狠狠干| 欧美日本在线看| 高清不卡一区二区| 婷婷国产v国产偷v亚洲高清| 欧美成人三级在线| aaa亚洲精品| 男女视频一区二区| 亚洲欧洲日韩在线| 欧美一区二区三区视频在线| 成人国产精品免费观看动漫| 日韩制服丝袜先锋影音| 中文字幕电影一区| 日韩一级成人av| 91视频免费看| 国产成人免费视频| 日韩不卡在线观看日韩不卡视频| 日本一区二区三级电影在线观看 | 日本中文一区二区三区| 1024亚洲合集| 久久精品一区二区三区不卡牛牛 | 国产成人免费xxxxxxxx| 婷婷成人激情在线网| 亚洲欧洲国产日韩| 久久综合久久99| 3atv在线一区二区三区| 在线视频国产一区| 91首页免费视频| 高清视频一区二区| 国产精品性做久久久久久| 麻豆精品国产传媒mv男同| 亚洲国产色一区| 亚洲在线免费播放| 亚洲视频一区二区免费在线观看 | 色婷婷久久久综合中文字幕| 国产在线精品一区二区三区不卡| 香蕉久久一区二区不卡无毒影院| 国产精品久久精品日日| 久久网这里都是精品| 日韩欧美一二三四区| 欧美日韩国产一二三| 91国产成人在线| 日本久久精品电影| 91丨porny丨最新| 91蜜桃免费观看视频| 成人丝袜18视频在线观看| 国产不卡免费视频| 精品一区二区av| 老司机精品视频导航| 毛片基地黄久久久久久天堂| 五月婷婷色综合| 日本成人在线一区| 蜜芽一区二区三区| 免费观看成人av| 国内外成人在线视频| 精品一区二区三区在线播放视频| 免费成人在线视频观看| 久久91精品国产91久久小草| 国内精品伊人久久久久av影院 | 国产成人av影院| 大尺度一区二区| 91麻豆福利精品推荐| 在线精品视频免费观看| 在线播放亚洲一区| 久久综合狠狠综合久久激情 | 久久青草欧美一区二区三区| 亚洲国产精品精华液ab| 亚洲男人的天堂一区二区 | 久久影院视频免费| 国产精品网友自拍| 一区二区三区色| 美女一区二区视频| 国产成人av福利| 一本久久精品一区二区| 91精品在线免费观看| 久久久久久久久蜜桃| 亚洲视频免费观看| 久久成人麻豆午夜电影| 99视频超级精品| 欧美日韩精品久久久| 精品国产精品网麻豆系列| 亚洲欧美日韩在线| 美女在线一区二区| 色综合天天在线| 日韩欧美精品在线视频| 亚洲四区在线观看| 激情综合色播激情啊| 在线观看亚洲精品视频| 久久影院午夜论| 午夜激情一区二区三区| 国产盗摄精品一区二区三区在线| 欧美综合欧美视频| 中文字幕久久午夜不卡| 日韩av电影免费观看高清完整版在线观看 | 一区二区三区四区高清精品免费观看 | 国产麻豆一精品一av一免费| 91久久精品一区二区二区| 久久久蜜臀国产一区二区|