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

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

?? default.cpp

?? 橢圓曲線密碼系統(tǒng)教程和相關(guān)源代碼,是非常難得的學(xué)術(shù)資料
?? CPP
字號(hào):
// 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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区福利视频| 亚洲桃色在线一区| 麻豆一区二区三| 7777精品伊人久久久大香线蕉| 亚洲精品成人少妇| 欧美色老头old∨ideo| 日韩和欧美一区二区三区| 4438x成人网最大色成网站| 美女脱光内衣内裤视频久久影院| 日韩一级片在线观看| 韩国女主播成人在线| 国产精品区一区二区三区| 99久久综合精品| 亚洲一区二区三区国产| 69av一区二区三区| 国产美女在线观看一区| 一区二区中文视频| 欧美日本一区二区三区四区| 美女看a上一区| 国产精品嫩草久久久久| 欧美亚洲动漫精品| 精品一区免费av| 日韩美女精品在线| 欧美一区二区三区在线电影| 国产精品一区二区黑丝| 国产精品国产三级国产aⅴ入口| 精品视频一区 二区 三区| 久久99精品国产麻豆不卡| 亚洲特级片在线| 日韩免费看网站| 91亚洲男人天堂| 美女mm1313爽爽久久久蜜臀| 国产精品久久久久一区二区三区 | 亚洲国产精品久久久久婷婷884| 欧美一区二区视频观看视频| 成人免费观看av| 日韩激情一二三区| 中文字幕在线不卡| 日韩欧美国产精品| 色琪琪一区二区三区亚洲区| 久久国产精品色婷婷| 曰韩精品一区二区| 精品成人在线观看| 欧美人xxxx| 99视频精品在线| 国产风韵犹存在线视精品| 性做久久久久久免费观看欧美| 国产夜色精品一区二区av| 欧美日本一区二区三区| www.在线成人| 国产精一区二区三区| 丝袜亚洲精品中文字幕一区| 国产精品天干天干在观线| 欧美成人伊人久久综合网| 欧美在线一区二区| 99精品国产视频| 国产成人福利片| 韩国在线一区二区| 蜜桃久久久久久| 香蕉成人伊视频在线观看| 亚洲激情图片qvod| 亚洲日本免费电影| 中文字幕+乱码+中文字幕一区| 日韩精品中文字幕在线不卡尤物 | 欧美一级在线免费| 欧美日免费三级在线| av网站免费线看精品| 国产乱码一区二区三区| 久久精品噜噜噜成人88aⅴ| 午夜精品成人在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品久久久久久久久久免费看 | 蜜桃一区二区三区在线| 亚洲自拍偷拍图区| 亚洲一区二区三区四区中文字幕| 欧美精品一区二区三区在线播放| 欧美肥妇bbw| 3d动漫精品啪啪1区2区免费| 欧美色欧美亚洲另类二区| 欧美偷拍一区二区| 欧美日韩国产影片| 欧美日韩高清一区二区不卡 | 91精品综合久久久久久| 欧美日韩一级片网站| 欧美日韩成人激情| 欧美一区二区久久| 精品第一国产综合精品aⅴ| 久久色成人在线| 中文文精品字幕一区二区| 国产精品免费观看视频| 亚洲婷婷综合久久一本伊一区| 136国产福利精品导航| 一区二区三区在线视频观看58 | 精品国产a毛片| 久久久青草青青国产亚洲免观| 国产无一区二区| 亚洲麻豆国产自偷在线| 午夜精品成人在线视频| 黄色日韩三级电影| 波多野结衣一区二区三区| 色婷婷精品久久二区二区蜜臀av| 欧美在线免费视屏| 91精品国产综合久久福利| 久久亚洲春色中文字幕久久久| 国产精品美女久久久久久久| 一区二区在线观看视频在线观看| 亚洲成人av一区二区| 久久91精品久久久久久秒播| 国产成人免费在线观看| 欧美三级视频在线| ww久久中文字幕| 亚洲精品五月天| 蜜桃精品在线观看| 成人av资源网站| 911国产精品| 亚洲国产成人在线| 亚洲18色成人| 成人不卡免费av| 欧美日本视频在线| 国产日产亚洲精品系列| 一区二区高清视频在线观看| 另类小说欧美激情| 色综合久久久久久久久久久| 欧美剧情片在线观看| 国产欧美日韩视频在线观看| 亚洲制服丝袜一区| 国产成人av电影在线播放| 欧美色网站导航| 国产精品色婷婷| 麻豆成人综合网| 91福利国产成人精品照片| 久久综合色一综合色88| 亚洲一区二区三区四区在线| 国产精华液一区二区三区| 欧美日韩三级视频| 亚洲特级片在线| 国产老女人精品毛片久久| 在线成人高清不卡| 亚洲欧美日本韩国| 懂色av一区二区三区免费看| 91麻豆精品国产91久久久使用方法| 日本一区二区三区免费乱视频 | 久久久影院官网| 日韩av在线发布| 日本韩国精品一区二区在线观看| 久久久午夜精品理论片中文字幕| 亚洲国产精品久久不卡毛片| 成人黄页毛片网站| 久久精品一区二区三区不卡| 亚洲 欧美综合在线网络| 一本大道av一区二区在线播放| 久久久五月婷婷| 国内一区二区在线| 日韩一区二区在线看| 亚洲国产美女搞黄色| 色综合视频一区二区三区高清| 国产无人区一区二区三区| 久久国产尿小便嘘嘘尿| 欧美一区午夜视频在线观看| 一区二区三区成人| 日本丰满少妇一区二区三区| 国产精品免费观看视频| 成人app软件下载大全免费| 久久精品亚洲麻豆av一区二区| 久久av资源站| 精品欧美一区二区久久| 日本中文字幕一区二区视频| 欧美日韩高清一区二区三区| 亚洲成人av在线电影| 欧美精品一卡两卡| 亚洲电影激情视频网站| 欧美日韩一区成人| 午夜精品久久久久久久99樱桃| 欧美揉bbbbb揉bbbbb| 首页综合国产亚洲丝袜| 欧美日韩aaa| 久久精品国产在热久久| 精品av综合导航| 国产精品一区二区x88av| 国产精品三级在线观看| 色婷婷综合中文久久一本| 亚洲免费观看高清完整版在线观看| 91麻豆成人久久精品二区三区| 亚洲色图视频网站| 欧美日韩在线三级| 蜜臀av亚洲一区中文字幕| 精品成人佐山爱一区二区| 成人综合在线视频| 亚洲综合无码一区二区| 欧美日韩国产综合一区二区| 美腿丝袜一区二区三区| 国产色婷婷亚洲99精品小说| av成人老司机| 亚洲va欧美va人人爽午夜| 欧美成人女星排名| 成人av网址在线| 亚洲高清在线精品| 欧美本精品男人aⅴ天堂| 波多野结衣一区二区三区 | 欧美精品一区二区三区视频|