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

📄 hsel_stream.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	iRPos3 =	((Keys->iRightKey>>24)&0x000F)%iBlockCount;	

	iMPos0 =	(Keys->iMiddleKey&0x000F)%iBlockCount;
	iMPos1 =	((Keys->iMiddleKey>>8)&0x000F)%iBlockCount;
	iMPos2 =	((Keys->iMiddleKey>>16)&0x000F)%iBlockCount;
	iMPos3 =	((Keys->iMiddleKey>>24)&0x000F)%iBlockCount;	

	__int32 *lpBlock = (__int32*)(lpStream);//胶恳侩 4官捞飘 窜困

	if(iLPos0 != iRPos0){HSELSWAP(	(*(lpBlock+(iLPos0))),	(*(lpBlock+(iRPos0)))	);}
	if(iRPos0 != iMPos0){HSELSWAP(	(*(lpBlock+(iRPos0))),	(*(lpBlock+(iMPos0)))	);}

	if(iLPos1 != iRPos1){HSELSWAP(	(*(lpBlock+(iLPos1))),	(*(lpBlock+(iRPos1)))	);}
	if(iRPos1 != iMPos1){HSELSWAP(	(*(lpBlock+(iRPos1))),	(*(lpBlock+(iMPos1)))	);}

	if(iLPos2 != iRPos2){HSELSWAP(	(*(lpBlock+(iLPos2))),	(*(lpBlock+(iRPos2)))	);}
	if(iRPos2 != iMPos2){HSELSWAP(	(*(lpBlock+(iRPos2))),	(*(lpBlock+(iMPos2)))	);}

	if(iLPos3 != iRPos3){HSELSWAP(	(*(lpBlock+(iLPos3))),	(*(lpBlock+(iRPos3)))	);}
	if(iRPos3 != iMPos3){HSELSWAP(	(*(lpBlock+(iRPos3))),	(*(lpBlock+(iMPos3)))	);}
	return;
}

void CHSEL_STREAM::SwapDecrypt(char *lpStream,const __int32 iStreamSize)
{
	iBlockCount	= (iStreamSize>>2);	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;

	if(LIMIT_SWAP_BLOCK_COUNT > iBlockCount)	{return;}//喉钒捞 2俺 捞窍扼搁 胶恳 阂啊瓷.
	iBlockCount--;

	HselKey	*Keys = &Init.Keys;

	iLPos0 =	(Keys->iLeftKey&0x000F)%iBlockCount;
	iLPos1 =	((Keys->iLeftKey>>8)&0x000F)%iBlockCount;
	iLPos2 =	((Keys->iLeftKey>>16)&0x000F)%iBlockCount;
	iLPos3 =	((Keys->iLeftKey>>24)&0x000F)%iBlockCount;	

	iRPos0 =	(Keys->iRightKey&0x000F)%iBlockCount;
	iRPos1 =	((Keys->iRightKey>>8)&0x000F)%iBlockCount;
	iRPos2 =	((Keys->iRightKey>>16)&0x000F)%iBlockCount;
	iRPos3 =	((Keys->iRightKey>>24)&0x000F)%iBlockCount;	

	iMPos0 =	(Keys->iMiddleKey&0x000F)%iBlockCount;
	iMPos1 =	((Keys->iMiddleKey>>8)&0x000F)%iBlockCount;
	iMPos2 =	((Keys->iMiddleKey>>16)&0x000F)%iBlockCount;
	iMPos3 =	((Keys->iMiddleKey>>24)&0x000F)%iBlockCount;	

	__int32 *lpBlock = (__int32*)(lpStream);//胶恳侩 4官捞飘 窜困

	if(iRPos3 != iMPos3){HSELSWAP(	(*(lpBlock+(iRPos3))),	(*(lpBlock+(iMPos3)))	);}
	if(iLPos3 != iRPos3){HSELSWAP(	(*(lpBlock+(iLPos3))),	(*(lpBlock+(iRPos3)))	);}

	if(iRPos2 != iMPos2){HSELSWAP(	(*(lpBlock+(iRPos2))),	(*(lpBlock+(iMPos2)))	);}
	if(iLPos2 != iRPos2){HSELSWAP(	(*(lpBlock+(iLPos2))),	(*(lpBlock+(iRPos2)))	);}

	if(iRPos1 != iMPos1){HSELSWAP(	(*(lpBlock+(iRPos1))),	(*(lpBlock+(iMPos1)))	);}
	if(iLPos1 != iRPos1){HSELSWAP(	(*(lpBlock+(iLPos1))),	(*(lpBlock+(iRPos1)))	);}

	if(iRPos0 != iMPos0){HSELSWAP(	(*(lpBlock+(iRPos0))),	(*(lpBlock+(iMPos0)))	);}
	if(iLPos0 != iRPos0){HSELSWAP(	(*(lpBlock+(iLPos0))),	(*(lpBlock+(iRPos0)))	);}
	return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CHSEL_STREAM::DESLeftEncode_Type_1(char *lpStream,const __int32 iStreamSize)
{
	iTempLeftKey	= Init.Keys.iLeftKey;//努贰胶 郴狼 LeftKey狼 袍橇
	iBlockCount		= (iStreamSize>>2);	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= (iStreamSize&3);	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);	//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)lpStream;//鞠龋拳 措惑 喉钒 瘤沥侩 器牢磐
	char *lpChar			= ((char *)&(Init.Keys.iLeftKey));
	
	while(iBlockCount)
	{
		(*lpBlock)		^=	(iTempLeftKey);
		(iTempLeftKey)	=	(*(lpBlock++));
		(iBlockCount--);
	}
	while(iRemainCount)
	{
		lpStream[iPos++]	^=	(*(lpChar+iRemainCount));
		(iRemainCount--);
	}
	return;
}

void CHSEL_STREAM::DESLeftDecode_Type_1(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempLeftKey	= Init.Keys.iLeftKey;//努贰胶 郴狼 LeftKey狼 袍橇
	iBlockCount		= (iStreamSize>>2); //喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= (iStreamSize&3);//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);
	__int32 *lpBlock	= (__int32*)lpStream;//鞠龋拳 措惑 喉钒 瘤沥侩 器牢磐
	char *lpChar		= ((char *)&Init.Keys.iLeftKey);

	lpBlock			+=	(iBlockCount-1);
	(iTempLeftKey)	=	(*(lpBlock-1));

	while(	1	<	iBlockCount)
	{
		(*(lpBlock--))	^=	(iTempLeftKey);
		(iTempLeftKey)	=	(*(lpBlock-1))	;
		(iBlockCount--);
	}

	if(iBlockCount)
	{
		(*lpBlock)	^=	(Init.Keys.iLeftKey);
	}

	while(iRemainCount)
	{
		lpStream[iPos++]	^=	(*(lpChar+iRemainCount));
		(iRemainCount--);
	}
	return;
}

void CHSEL_STREAM::DESRightEncode_Type_1(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempRightKey	= Init.Keys.iRightKey;//努贰胶 郴狼 RightKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)(lpStream+iPos+iRemainCount);
	char *lpChar	= ((char *)&Init.Keys.iRightKey);

	lpBlock = (__int32*)(lpStream+iStreamSize-4);

	while(iBlockCount)
	{
		(*lpBlock)		^=	(iTempRightKey);
		(iTempRightKey)	=	(*(lpBlock--));
		iBlockCount--;
	}

	while(iRemainCount)
	{
		lpStream[--iRemainCount]	^=	(*(lpChar+iRemainCount));
	}
	return;
}

void CHSEL_STREAM::DESRightDecode_Type_1(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempRightKey	= Init.Keys.iRightKey;//努贰胶 郴狼 RightKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4

	__int32 *lpBlock	= (__int32*)(lpStream+iRemainCount);
	char *lpChar	= ((char *)&Init.Keys.iRightKey);

	iTempRightKey	= *(lpBlock+1);

	while(1 < iBlockCount)
	{
		(*(lpBlock++)) ^=	(iTempRightKey);
		iTempRightKey	=	(*(lpBlock+1));
		iBlockCount--;
	}

	if(iBlockCount)
	{
		*(lpBlock)		^=	(Init.Keys.iRightKey);
	}

	while(iRemainCount)
	{
		lpStream[--iRemainCount]	^=	(*(lpChar+iRemainCount));
	}

	return;
}

void CHSEL_STREAM::DESMiddleEncode_Type_1(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempMiddleKey	= Init.Keys.iMiddleKey;//努贰胶 郴狼 MiddleKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4

	__int32 *lpBlock	= (__int32*)(lpStream);
	char *lpChar	= ((char *)&Init.Keys.iMiddleKey);

	while(iBlockCount)
	{
		(*(lpBlock++)) ^= iTempMiddleKey;
		iBlockCount--;
	}
	while(iRemainCount)
	{
		lpStream[iPos++]	^=	(*(lpChar+iRemainCount));
		iRemainCount--;
	}

	return;
}

void CHSEL_STREAM::DESMiddleDecode_Type_1(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempMiddleKey	= Init.Keys.iMiddleKey;//努贰胶 郴狼 MiddleKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)(lpStream);
	char *lpChar			= ((char*)&Init.Keys.iMiddleKey);

	while(iBlockCount)
	{
		(*(lpBlock++)) ^= iTempMiddleKey;
		iBlockCount--;
	}
	while(iRemainCount)
	{
		lpStream[iPos++]	^=	(*(lpChar+iRemainCount));
		iRemainCount--;
	}
	return;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CHSEL_STREAM::DESLeftEncode_Type_2(char *lpStream,const __int32 iStreamSize)
{
	iTempLeftKey	= Init.Keys.iLeftKey;//努贰胶 郴狼 LeftKey狼 袍橇
	iBlockCount		= (iStreamSize>>2);	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= (iStreamSize&3);	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);	//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)lpStream;//鞠龋拳 措惑 喉钒 瘤沥侩 器牢磐
	char *lpChar			= ((char *)&(Init.Keys.iLeftKey));
	
	while(iBlockCount)
	{
		(*lpBlock)		+=	(iTempLeftKey);
		(iTempLeftKey)	=	(*(lpBlock++));
		(iBlockCount--);
	}
	while(iRemainCount)
	{
		lpStream[iPos++]	+=	(*(lpChar+iRemainCount));
		(iRemainCount--);
	}
	return;
}

void CHSEL_STREAM::DESLeftDecode_Type_2(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempLeftKey	= Init.Keys.iLeftKey;//努贰胶 郴狼 LeftKey狼 袍橇
	iBlockCount		= (iStreamSize>>2); //喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= (iStreamSize&3);//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);
	__int32 *lpBlock	= (__int32*)lpStream;//鞠龋拳 措惑 喉钒 瘤沥侩 器牢磐
	char *lpChar		= ((char *)&Init.Keys.iLeftKey);

	lpBlock			+=	(iBlockCount-1);
	(iTempLeftKey)	=	(*(lpBlock-1));

	while(	1	<	iBlockCount)
	{
		(*(lpBlock--))	-=	(iTempLeftKey);
		(iTempLeftKey)	=	(*(lpBlock-1))	;
		(iBlockCount--);
	}

	if(iBlockCount)
	{
		(*lpBlock)	-=	(Init.Keys.iLeftKey);
	}

	while(iRemainCount)
	{
		lpStream[iPos++]	-=	(*(lpChar+iRemainCount));
		(iRemainCount--);
	}
	return;
}

void CHSEL_STREAM::DESRightEncode_Type_2(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempRightKey	= Init.Keys.iRightKey;//努贰胶 郴狼 RightKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)(lpStream+iPos+iRemainCount);
	char *lpChar	= ((char *)&Init.Keys.iRightKey);

	lpBlock = (__int32*)(lpStream+iStreamSize-4);
	
	while(iBlockCount)
	{
		(*lpBlock)		+=	(iTempRightKey);
		(iTempRightKey)	=	(*(lpBlock--));
		iBlockCount--;
	}

	while(iRemainCount)
	{
		lpStream[--iRemainCount]	+=	(*(lpChar+iRemainCount));
	}
	return;
}

void CHSEL_STREAM::DESRightDecode_Type_2(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempRightKey	= Init.Keys.iRightKey;//努贰胶 郴狼 RightKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)(lpStream+iRemainCount);
	char *lpChar	= ((char *)&Init.Keys.iRightKey);

	iTempRightKey	= *(lpBlock+1);
	
	while(1 < iBlockCount)
	{
		(*(lpBlock++))	-=	(iTempRightKey);
		iTempRightKey	=	(*(lpBlock+1));
		iBlockCount--;
	}
	
	if(iBlockCount)
	{
		*(lpBlock)		-=	(Init.Keys.iRightKey);
	}

	while(iRemainCount)
	{
		lpStream[--iRemainCount]	-=	(*(lpChar+iRemainCount));
	}
	
	return;
}

void CHSEL_STREAM::DESMiddleEncode_Type_2(char *lpStream,const __int32 iStreamSize)//辨捞俊绰 付捞呈胶 蔼捞 绝促.
{
	iTempMiddleKey	= Init.Keys.iMiddleKey;//努贰胶 郴狼 MiddleKey狼 袍橇
	iBlockCount		= iStreamSize>>2;	//喉钒荐 啊瘤绊 坷扁 == __int32 iBlockCount = iStreamSize/4;
	iRemainCount	= iStreamSize&3;	//楼捧府 辨捞 罐扁==__int32 iRemainCount = iStreamSize%4; 
	iPos			= (iBlockCount<<2);			//官捞飘 窜困 困摹 iBlockCount*4
	__int32 *lpBlock	= (__int32*)(lpStream);
	char *lpChar	= ((char *)&Init.Keys.iMiddleKey);

	while(iBlockCount)
	{
		(*(lpBlock++)) += iTempMiddleKey;
		iBlockCount--;
	}
	while(iRemainCount)
	{
		lpStream[iPos++]	+=	(*(lpChar+iRemainCount));

⌨️ 快捷键说明

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