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

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

?? default.cpp

?? 利用VC編寫的加解密算法程序,包括DES、RSA等多個算法
?? CPP
字號:
// default.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "default.h"
#include "queue.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_BlockCipher::Encryption::BLOCKSIZE;
static const unsigned int KEYLENGTH = Default_BlockCipher::Encryption::DEFAULT_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.

static void Mash(const byte *in, size_t inLen, byte *out, size_t outLen, int iterations)
{
	if (BytePrecision(outLen) > 2)
		throw InvalidArgument("Mash: output legnth too large");

	size_t bufSize = RoundUpToMultipleOf(outLen, (size_t)DefaultHashModule::DIGESTSIZE);
	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 byte *passphrase, size_t passphraseLength, const byte *salt, size_t saltLength, byte *key, byte *IV)
{
	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 *attachment)
	: ProxyFilter(NULL, 0, 0, attachment), m_passphrase((const byte *)passphrase, strlen(passphrase))
{
}

DefaultEncryptor::DefaultEncryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment)
	: ProxyFilter(NULL, 0, 0, attachment), m_passphrase(passphrase, passphraseLength)
{
}


void DefaultEncryptor::FirstPut(const byte *)
{
	// VC60 workaround: __LINE__ expansion bug
	CRYPTOPP_COMPILE_ASSERT_INSTANCE(SALTLENGTH <= DefaultHashModule::DIGESTSIZE, 1);
	CRYPTOPP_COMPILE_ASSERT_INSTANCE(BLOCKSIZE <= DefaultHashModule::DIGESTSIZE, 2);

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

	// use hash(passphrase | time | clock) as salt
	hash.Update(m_passphrase, m_passphrase.size());
	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(m_passphrase, m_passphrase.size());
	hash.Update(salt, SALTLENGTH);
	hash.Final(keyCheck);

	AttachedTransformation()->Put(salt, SALTLENGTH);

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

	m_cipher.SetKeyWithIV(key, key.size(), IV);
	SetFilter(new StreamTransformationFilter(m_cipher));

	m_filter->Put(keyCheck, BLOCKSIZE);
}

void DefaultEncryptor::LastPut(const byte *inString, size_t length)
{
	m_filter->MessageEnd();
}

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

DefaultDecryptor::DefaultDecryptor(const char *p, BufferedTransformation *attachment, bool throwException)
	: ProxyFilter(NULL, SALTLENGTH+BLOCKSIZE, 0, attachment)
	, m_state(WAITING_FOR_KEYCHECK)
	, m_passphrase((const byte *)p, strlen(p))
	, m_throwException(throwException)
{
}

DefaultDecryptor::DefaultDecryptor(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment, bool throwException)
	: ProxyFilter(NULL, SALTLENGTH+BLOCKSIZE, 0, attachment)
	, m_state(WAITING_FOR_KEYCHECK)
	, m_passphrase(passphrase, passphraseLength)
	, m_throwException(throwException)
{
}

void DefaultDecryptor::FirstPut(const byte *inString)
{
	CheckKey(inString, inString+SALTLENGTH);
}

void DefaultDecryptor::LastPut(const byte *inString, size_t length)
{
	if (m_filter.get() == NULL)
	{
		m_state = KEY_BAD;
		if (m_throwException)
			throw KeyBadErr();
	}
	else
	{
		m_filter->MessageEnd();
		m_state = WAITING_FOR_KEYCHECK;
	}
}

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

	DefaultHashModule hash;
	hash.Update(m_passphrase, m_passphrase.size());
	hash.Update(salt, SALTLENGTH);
	hash.Final(check);

	SecByteBlock key(KEYLENGTH);
	SecByteBlock IV(BLOCKSIZE);
	GenerateKeyIV(m_passphrase, m_passphrase.size(), salt, SALTLENGTH, key, IV);

	m_cipher.SetKeyWithIV(key, key.size(), IV);
	std::auto_ptr<StreamTransformationFilter> decryptor(new StreamTransformationFilter(m_cipher));

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

	SetFilter(decryptor.release());

	if (memcmp(check, check+BLOCKSIZE, BLOCKSIZE))
	{
		m_state = KEY_BAD;
		if (m_throwException)
			throw KeyBadErr();
	}
	else
		m_state = KEY_GOOD;
}

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

static DefaultMAC * NewDefaultEncryptorMAC(const byte *passphrase, size_t passphraseLength)
{
	size_t macKeyLength = DefaultMAC::StaticGetValidKeyLength(16);
	SecByteBlock macKey(macKeyLength);
	// since the MAC is encrypted there is no reason to mash the passphrase for many iterations
	Mash(passphrase, passphraseLength, macKey, macKeyLength, 1);
	return new DefaultMAC(macKey, macKeyLength);
}

DefaultEncryptorWithMAC::DefaultEncryptorWithMAC(const char *passphrase, BufferedTransformation *attachment)
	: ProxyFilter(NULL, 0, 0, attachment)
	, m_mac(NewDefaultEncryptorMAC((const byte *)passphrase, strlen(passphrase)))
{
	SetFilter(new HashFilter(*m_mac, new DefaultEncryptor(passphrase), true));
}

DefaultEncryptorWithMAC::DefaultEncryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment)
	: ProxyFilter(NULL, 0, 0, attachment)
	, m_mac(NewDefaultEncryptorMAC(passphrase, passphraseLength))
{
	SetFilter(new HashFilter(*m_mac, new DefaultEncryptor(passphrase, passphraseLength), true));
}

void DefaultEncryptorWithMAC::LastPut(const byte *inString, size_t length)
{
	m_filter->MessageEnd();
}

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

DefaultDecryptorWithMAC::DefaultDecryptorWithMAC(const char *passphrase, BufferedTransformation *attachment, bool throwException)
	: ProxyFilter(NULL, 0, 0, attachment)
	, m_mac(NewDefaultEncryptorMAC((const byte *)passphrase, strlen(passphrase)))
	, m_throwException(throwException)
{
	SetFilter(new DefaultDecryptor(passphrase, m_hashVerifier=new HashVerifier(*m_mac, NULL, HashVerifier::PUT_MESSAGE), throwException));
}

DefaultDecryptorWithMAC::DefaultDecryptorWithMAC(const byte *passphrase, size_t passphraseLength, BufferedTransformation *attachment, bool throwException)
	: ProxyFilter(NULL, 0, 0, attachment)
	, m_mac(NewDefaultEncryptorMAC(passphrase, passphraseLength))
	, m_throwException(throwException)
{
	SetFilter(new DefaultDecryptor(passphrase, passphraseLength, m_hashVerifier=new HashVerifier(*m_mac, NULL, HashVerifier::PUT_MESSAGE), throwException));
}

DefaultDecryptor::State DefaultDecryptorWithMAC::CurrentState() const
{
	return static_cast<const DefaultDecryptor *>(m_filter.get())->CurrentState();
}

bool DefaultDecryptorWithMAC::CheckLastMAC() const
{
	return m_hashVerifier->GetLastResult();
}

void DefaultDecryptorWithMAC::LastPut(const byte *inString, size_t length)
{
	m_filter->MessageEnd();
	if (m_throwException && !CheckLastMAC())
		throw MACBadErr();
}

NAMESPACE_END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
884aa四虎影成人精品一区| 精品视频1区2区| 蜜臀久久99精品久久久久久9| 亚洲成人第一页| 日韩综合一区二区| 久久99精品国产.久久久久久 | 天天影视色香欲综合网老头| 日韩电影免费在线观看网站| av午夜精品一区二区三区| 欧美激情一区二区三区蜜桃视频| 色综合天天综合在线视频| 国产亚洲欧美色| 国产一区二区三区视频在线播放| 一级日本不卡的影视| 亚洲国产欧美日韩另类综合| 亚洲男同1069视频| 精品国产一区二区三区av性色| 五月婷婷综合网| 中文字幕日韩一区| 亚洲国产另类精品专区| 婷婷夜色潮精品综合在线| 成人av小说网| 国产精品人成在线观看免费| 亚洲国产精品精华液网站| 大白屁股一区二区视频| 一区二区久久久| 日韩欧美国产精品一区| 91丝袜高跟美女视频| 老司机一区二区| 国产精品久久久久国产精品日日| 国产精品一区不卡| 国产在线国偷精品免费看| 久久这里只有精品首页| 一区二区三区精品| www.日韩精品| 欧美精彩视频一区二区三区| 日韩精品亚洲一区二区三区免费| 97久久超碰国产精品电影| 精品国产一区二区国模嫣然| 午夜精品福利在线| 欧美色老头old∨ideo| 国产精品久久久久一区二区三区| 欧美男人的天堂一二区| 一本高清dvd不卡在线观看| 一本到一区二区三区| 91视视频在线观看入口直接观看www | 国产精品理论片| 91精品国产品国语在线不卡| 在线看不卡av| 亚洲一区二区三区视频在线播放| 欧美精品成人一区二区三区四区| 狠狠色丁香久久婷婷综合_中 | 国产高清亚洲一区| 日韩国产欧美三级| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩国产经典色站一区二区三区| 国产一区二区三区免费看| 亚洲精品老司机| 精品亚洲aⅴ乱码一区二区三区| 91精品免费在线观看| 日本va欧美va精品| 国产精品伦理一区二区| 精品久久久网站| 久久新电视剧免费观看| 精品乱人伦一区二区三区| 欧美丰满少妇xxxxx高潮对白| 色综合久久中文字幕| 色婷婷综合久色| 色综合久久综合网| 9191久久久久久久久久久| 韩国视频一区二区| 国产欧美一区二区精品性色超碰 | 亚洲成人激情av| 国产精品资源在线看| 日韩欧美久久久| 天天色综合天天| 欧美日本乱大交xxxxx| 欧美国产日韩一二三区| 婷婷六月综合亚洲| 国产制服丝袜一区| 老司机一区二区| 欧美日韩精品一区二区三区四区 | 久久久久亚洲蜜桃| 精品免费一区二区三区| 国产精品全国免费观看高清 | 久久久精品国产免大香伊| 国产精品你懂的在线欣赏| 日韩高清一级片| 色综合久久66| 国产精品短视频| 国产精品一区二区久久不卡 | 国产精品自拍在线| 国产高清不卡二三区| 制服丝袜成人动漫| 亚洲免费观看高清在线观看| 久久99久久99小草精品免视看| eeuss鲁片一区二区三区在线看| 久久久久9999亚洲精品| 久久99精品久久久久久久久久久久 | 国产亚洲成年网址在线观看| 日本美女一区二区| 日韩三级中文字幕| 91精品国产综合久久香蕉的特点| 精品一区二区三区在线视频| 在线观看日韩高清av| 亚洲大片免费看| 色综合久久综合网97色综合| 一区二区三区欧美久久| 91丨porny丨蝌蚪视频| 亚洲美女电影在线| 欧美中文字幕一区二区三区| 日韩—二三区免费观看av| 777午夜精品免费视频| 美女一区二区在线观看| 欧美一区二区观看视频| 国内精品写真在线观看| 中文字幕在线观看不卡视频| 欧美不卡一二三| 日韩综合在线视频| 欧美tickling挠脚心丨vk| 国产成人精品一区二区三区网站观看| 国产亚洲自拍一区| 色婷婷综合久色| 国产99久久久国产精品潘金| 亚洲黄色小视频| 精品粉嫩aⅴ一区二区三区四区 | 国产精品三级av在线播放| 欧美性色黄大片手机版| 成人深夜视频在线观看| 久久不见久久见免费视频1| 久久精品男人的天堂| 欧美高清在线一区| 欧美亚洲动漫制服丝袜| 在线观看不卡视频| 欧美一区二区三区免费大片 | 99久久精品国产导航| 成人蜜臀av电影| 欧美亚洲动漫另类| 91精品国产综合久久福利| 7777精品久久久大香线蕉| 欧美va天堂va视频va在线| 久久久久久久久久久久电影| 综合欧美一区二区三区| 国产日韩精品一区二区浪潮av| 91丝袜美腿高跟国产极品老师| 精品一区二区三区在线观看| 欧美日精品一区视频| 国产专区综合网| 久草热8精品视频在线观看| 日韩美女视频一区| 国产精品传媒视频| 国产精品美女久久久久aⅴ国产馆| 国产欧美综合在线| 自拍偷拍国产精品| 午夜av一区二区三区| 日韩不卡免费视频| 久久99精品国产.久久久久久 | 国产成人在线免费观看| 国产精品主播直播| 北条麻妃一区二区三区| 国产三区在线成人av| 91成人网在线| 久久久精品蜜桃| 综合自拍亚洲综合图不卡区| 亚洲综合成人网| 国产一区二区导航在线播放| 懂色av一区二区夜夜嗨| 欧美视频精品在线| 亚洲国产精品传媒在线观看| 一区二区久久久久| 国产老肥熟一区二区三区| 国产成人综合自拍| 欧美一区二区三区视频免费| 国产精品护士白丝一区av| 五月综合激情婷婷六月色窝| 国产精品白丝jk白祙喷水网站| 在线观看www91| 欧美v日韩v国产v| 精品乱人伦小说| 亚洲免费观看高清完整| 中文字幕不卡在线| 中文字幕高清一区| 亚洲综合一区二区精品导航| 国产在线视频精品一区| 欧美精品一区二区久久久| 日本在线观看不卡视频| 91精品久久久久久久久99蜜臂 | 亚洲国产日韩精品| 91麻豆swag| 亚洲国产欧美另类丝袜| 欧美婷婷六月丁香综合色| 一区二区三区在线观看欧美| 国产91清纯白嫩初高中在线观看 | 欧美三级中文字幕在线观看| 亚洲女子a中天字幕| 欧美疯狂做受xxxx富婆| 国产一区二三区| 中文字幕一区在线观看视频| 欧美综合久久久| 精品一区二区免费|