⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 endistbuffer.cpp

📁 aes的原代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\endistbuffer.h"
/**
 * 加扰缓冲区公共构造器
 * 参数:
 *	pcID 机器码
 *	secLen 段长度
 *	secNum 第一次需要追溯到的段数,文件开始为第一段即为 0
 */
//char sss[550];
EnDistBuffer::EnDistBuffer(unsigned char* pcID,int secLen,int secNum)
{
	this->pcID = new unsigned char[ID_LEN];
	memcpy(this->pcID,pcID,ID_LEN);
	//this->pcID = pcID;
	this->secLen = secLen;
	this->secNum = secNum;
	this->iniPK();
	gdk = new GenDistKey(pR,qR,xR);
	Ri = gdk->SectionSeed(secNum);
	/*memset(s,'\0',sizeof(s));
	Ri.GetStr(s);
	printf("%s\n",s);*/
	this->tosclen=0;
	this->initialKey(Ri);
}
/**
 * 加扰缓冲区,由于是对缓存区直接异或加密,所有如有需要请备份好原缓冲区内容
 * 参数:
 *	buf 源缓冲区
 *	len 源缓冲区长度
 * 返回:加扰后的缓冲区指针
 */
unsigned char * EnDistBuffer::EnBuffer(unsigned char *buf,int len)
{
	tosclen+=len;
	for(int i =0; i<len; i++)
	{
		buf[i]^=blckKey[i%KBL];
		buf[i]^=blckKey[KBL-i%KBL-1];
		if((i+1)%KBL==0) nextKey();  //待改进,可以少做一次
	}
	if(tosclen == secLen)
	{ 
		initialKey(Ri);
		tosclen =0;
		secNum;
	}
	return buf;
}
/**
 * 初始化密钥
 */
void EnDistBuffer::initialKey(BigInt Rx)
{
	long len = Rx.m_nLength;
	unsigned long *val = Rx.m_ulValue;
	memset(blckKey,0,sizeof(blckKey));
	//for(int i=0; i<KBL; i++) blckKey[i] = 0;
	/*memset(sss,'\0',sizeof(sss));
	Ri.GetStr(sss);
	printf("%s\n",sss);*/
	/*printf("len===%d\n",len);
	for(int i=0; i<len; i++)
		printf("%ld=",val[i]);
	printf("\n");*/
	if(len>=KBL)
	{
		for(int i=0; i<len; i++)
		{
			blckKey[i%KBL]^=(unsigned char)(((unsigned char)((__int64)val[i]*PRM3%PRM2))^blckKey[KBL-i%KBL-1]);
			//printf("%x-",blckKey[i%KBL]);
		}
		//printf("\n====**********************************+++++++++++++===========\n");
	}
	else
	{
		for(int i=0; i<KBL; i++)
		{
			blckKey[i]^=(unsigned char)(((unsigned char)((__int64)val[i%KBL]*PRM3%PRM2))^blckKey[KBL-i-1]);
		}
	}
	/*for(int i=0; i<KBL; i++)
		printf("%x-",blckKey[i]);
	printf("\n");*/
	/*for(int i=0; i<KBL; i++)
		printf("%x-",pcID[i]);
	printf("\n");*/
	Ri=gdk->NextSeed(Rx);
}
/**
 * 求当前密钥的下一个密钥
 */
void EnDistBuffer::nextKey()
{
	for(int i=0; i<KBL; i++)
	{
		blckKey[i]^=(unsigned char)(PRM1*blckKey[KBL-i-1]%PRM2);
	}
}

void EnDistBuffer::iniPK()
{
	int l1,l2,l3;
	l1 = strlen(PP);
	l2 = strlen(PQ);
	l3 = strlen(PX);
	//printf("%d %d %d\n",l1,l2,l3);
	//getchar();
	pR = new char[l1+1];
	qR = new char[l2+1];
	xR = new char[l3+1];
	memset(pR,'\0',sizeof(pR));
	memset(qR,'\0',sizeof(qR));
	memset(xR,'\0',sizeof(xR));
	strcpy(pR,PP);
	strcpy(qR,PQ);
	strcpy(xR,PX);
	/*for(int i=1; i<l1; i++)
	{
		for(int j=i; j<l1; j++)
			pR[j]=(char)((int)pR[j]*pcID[j%KBL]%DECI);
	}
	for(int i=l2-1; i>0; i--)
	{
		for(int j=i; j<l2; j++)
			qR[i]=(char)((int)pR[j]*pcID[j%KBL]%DECI);
	}*/
	for(int i=1; i<l3; i++)
	{
		for(int j=l3-1; j>=i; j--)
			xR[j]=(char)((int)xR[j]*pcID[j%KBL]%DECI)+'0';
	}
	//printf("%s=\n\n",xR);
}
EnDistBuffer::~EnDistBuffer(void)
{
	delete(gdk);
	delete[] pcID;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -