#include 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