📄 hsel_stream.cpp
字号:
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 + -