CMUtil/src/crypt/Overflow.cpp

94 lines
2.2 KiB
C++

#include<hgl/type/DataType.h>
namespace hgl
{
namespace crypt
{
/**
* 溢出加密
* @param target 加密后的数据存放区
* @param source 加密前的数据存放区
* @param size 数据长度
* @param key 密码
* @param key_size 密码长度
*/
void OverflowEncrypt(void *target, void *source, int size, void *key, int key_size)
{
int n;
uint8 *key_p;
uint8 *tp, *sp;
n = key_size;
key_p = (uint8 *)key;
tp = (uint8 *)target;
sp = (uint8 *)source;
while (size--)
{
uint tmp = (*sp) + (*key_p);
if (tmp > 0xFF)
*tp = tmp - 0x100;
else
*tp = tmp;
*key_p ^= *tp;
tp++;
sp++;
if (--n == 0)
{
n = key_size;
key_p = (uint8 *)key;
}
else
key_p++;
}
}
/**
* 溢出解密
* @param target 解密后的数据存放区
* @param source 解密前的数据存放区
* @param size 数据长度
* @param key 密码
* @param keysize 密码长度
*/
void OverflowDecrypt(void *target, void *source, int size, void *key, int key_size)
{
int n;
uint8 *key_p;
uint8 *tp, *sp;
n = key_size;
key_p = (uint8 *)key;
tp = (uint8 *)target;
sp = (uint8 *)source;
while (size--)
{
if (*key_p > *sp)
*tp = *sp + 0x100 - (*key_p);
else
*tp = *sp - (*key_p);
*key_p ^= *sp;
tp++;
sp++;
if (--n == 0)
{
n = key_size;
key_p = (uint8 *)key;
}
else
key_p++;
}
}
}//namespace crypt
}//namespace hgl