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

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

?? default.cpp

?? 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一区二区三区免费野_久草精品视频
一卡二卡三卡日韩欧美| 日韩一区在线免费观看| 91黄色免费版| 色婷婷综合久久久中文字幕| 成人免费毛片a| 不卡在线视频中文字幕| 色综合久久综合中文综合网| 91一区二区三区在线观看| 99re66热这里只有精品3直播| 成人动漫一区二区| 色av一区二区| 欧美精品在线视频| 日韩精品一区二区三区视频 | 中文字幕不卡在线观看| 国产欧美日韩精品a在线观看| 国产女人18毛片水真多成人如厕| 日本一区二区成人| 亚洲精品国产第一综合99久久| 亚洲一级二级三级在线免费观看| 日韩高清欧美激情| 国产91综合一区在线观看| 一本色道久久综合精品竹菊| 欧美视频一区在线观看| 精品久久久久久综合日本欧美| 久久精品在线免费观看| 亚洲激情综合网| 蜜桃视频第一区免费观看| 国产精品99久| 欧美吻胸吃奶大尺度电影 | 欧美一区二区三区婷婷月色| 久久综合色之久久综合| 国产精品乱码妇女bbbb| 偷拍亚洲欧洲综合| 国产91综合一区在线观看| 欧美日韩视频专区在线播放| 2024国产精品| 亚洲成人av在线电影| 国产91富婆露脸刺激对白| 一本一道久久a久久精品| 日韩一区二区电影在线| 亚洲欧美影音先锋| 激情图片小说一区| 欧美在线观看一区| 亚洲国产精品精华液2区45| 午夜久久久久久电影| 成人h版在线观看| 日韩视频在线永久播放| 亚洲一区二区三区精品在线| 国模冰冰炮一区二区| 欧美三级电影在线观看| 国产精品午夜在线| 国产又黄又大久久| 欧美www视频| 亚洲成人资源在线| av在线不卡免费看| 久久久久久久久久久久久女国产乱 | 蜜乳av一区二区| 欧洲av一区二区嗯嗯嗯啊| 日本一区二区免费在线观看视频| 蜜桃精品视频在线观看| 欧美日韩一区二区三区高清| 亚洲美女视频一区| 不卡一区中文字幕| 国产精品久久久久精k8| 国产盗摄女厕一区二区三区| 精品免费99久久| 看片网站欧美日韩| 欧美一级爆毛片| 日本v片在线高清不卡在线观看| 一本大道久久a久久综合婷婷| 中文字幕一区不卡| 成人动漫一区二区在线| 国产日韩v精品一区二区| 国产一区二区福利| 久久新电视剧免费观看| 国产曰批免费观看久久久| 欧美岛国在线观看| 国产综合一区二区| 久久久久免费观看| 国产激情视频一区二区在线观看 | 欧美色男人天堂| 亚洲综合免费观看高清完整版在线 | 欧美日韩亚洲综合| 五月综合激情日本mⅴ| 欧美日韩国产电影| 日韩av中文在线观看| 91精品在线一区二区| 日本不卡在线视频| 日韩欧美国产高清| 国产成人一区二区精品非洲| 国产女主播视频一区二区| www.视频一区| 亚洲一区二区欧美| 在线综合+亚洲+欧美中文字幕| 日韩高清一级片| 久久久精品免费免费| av一区二区不卡| 亚洲va在线va天堂| 日韩视频免费观看高清完整版在线观看 | 欧美一级久久久久久久大片| 久久91精品久久久久久秒播| 久久精品视频免费| 色综合色狠狠天天综合色| 日韩影视精彩在线| 久久久国产一区二区三区四区小说 | 中文字幕一区二区三区在线观看| 色综合色狠狠综合色| 日韩电影一区二区三区| 中文字幕巨乱亚洲| 欧美精品高清视频| 国产一区二区精品在线观看| 一区二区三区成人在线视频| 日韩欧美在线一区二区三区| 成人激情黄色小说| 青青国产91久久久久久| 国产精品久久久久久久岛一牛影视 | 国产专区综合网| 一区二区三区小说| 久久青草欧美一区二区三区| 在线精品视频小说1| 国产精品白丝jk白祙喷水网站| 亚洲综合丝袜美腿| 国产精品国产a级| 日韩一区二区影院| 在线视频国内一区二区| 国产suv精品一区二区6| 奇米精品一区二区三区在线观看一| 国产精品沙发午睡系列990531| 欧美一区二区三区视频在线观看| 99精品黄色片免费大全| 狠狠色2019综合网| 日韩1区2区日韩1区2区| 亚洲人成网站影音先锋播放| 久久精子c满五个校花| 日韩一级黄色大片| 色爱区综合激月婷婷| 成人99免费视频| 国产91清纯白嫩初高中在线观看 | 日韩欧美一区二区三区在线| 91国内精品野花午夜精品| 国产99久久久国产精品| 国产综合色在线视频区| 久久精品久久精品| 美女性感视频久久| 爽爽淫人综合网网站| 亚洲高清久久久| 亚洲国产欧美在线| 一区二区三区**美女毛片| 亚洲六月丁香色婷婷综合久久| 国产精品卡一卡二卡三| 国产精品视频第一区| 国产精品理论片在线观看| 国产精品亲子乱子伦xxxx裸| 日本一区二区电影| 国产精品美女久久久久久| 亚洲国产精品激情在线观看| 中文字幕欧美日本乱码一线二线| 久久色视频免费观看| 久久久不卡网国产精品一区| 久久女同性恋中文字幕| 国产午夜亚洲精品理论片色戒| 国产欧美日韩三级| 亚洲人成亚洲人成在线观看图片 | 久久精品国产秦先生| 精品在线一区二区| 国产成人在线观看免费网站| 成人免费的视频| 日本道在线观看一区二区| 欧美日韩国产一区| 精品免费国产一区二区三区四区| 国产亚洲欧洲一区高清在线观看| 国产女同性恋一区二区| 亚洲女同一区二区| 偷拍一区二区三区| 国产精品亚洲人在线观看| 波多野结衣中文字幕一区| 日本韩国视频一区二区| 欧美乱妇15p| 久久精品一区蜜桃臀影院| 亚洲欧美一区二区三区极速播放 | 国产激情视频一区二区三区欧美 | 亚洲自拍偷拍av| 伦理电影国产精品| av成人老司机| 91精品欧美一区二区三区综合在| 久久精品日韩一区二区三区| 亚洲精品高清在线| 久久国产精品99久久人人澡| 99久久精品免费精品国产| 欧美日韩高清在线| 国产欧美日韩视频一区二区| 亚洲综合丝袜美腿| 国产精品1024| 欧美日韩国产综合久久| 亚洲国产精品ⅴa在线观看| 日韩专区在线视频| 97se亚洲国产综合自在线不卡| 日韩视频一区二区在线观看| 中文字幕综合网| 国产一区二区久久|