📄 arithzxz.h
字号:
/////////////////////////////////////////////////////////////////////////////
//Discription: 压缩和加密等公共函数
//Written By: ZHANGXIANZHU
//Date: 2003-03-27
//Version: 1.0
//Modified by:
//Modified Date:
//Version:
//
////////////////////////////////////////////////////////////////////////////
#ifndef _ARITHZXZ_H__
#define _ARITHZXZ_H__
/////////////////////////////////////////////////////////////////////////////
//功能: 生成DES加密KEY, 调用时必须保证有8个字节的出口缓冲区
//算法: 字符串sz初始为 0x0000000000000000
// 循环n次sz对sz做DES加密
//入口: n -> 循环次数
//
//出口: pbyKey -> 8字节Key值
//
//返回:
/////////////////////////////////////////////////////////////////////////////
void WINAPI GetDesKey(unsigned char *pbyKey, int n);
/////////////////////////////////////////////////////////////////////////////
//功能: 做DES加解密
//入口: source: 原字符串(8字节)
// key: 加解密钥匙(8字节)
// flag: 'E'或'e' 时加密
// 'D'或'd' 时解密
//出口: dest: 目的字符串(8字节)
//
//返回:
/////////////////////////////////////////////////////////////////////////////
void WINAPI Des(unsigned char *source, unsigned char *dest,
unsigned char *key, unsigned char flag);
/////////////////////////////////////////////////////////////////////////////
//功能: 用DES做MAC校验
//算法: 每8位循环异或,DES,异或, 不够8位时用0x00填充
//入口: source: 原字符串
// iLen: 原字符串长度
// key: 加密钥匙(8字节)
//出口: dest: 目的字符串(8字节)
//
//返回:
/////////////////////////////////////////////////////////////////////////////
void WINAPI DesMac( unsigned char *source, int iLen,
unsigned char *dest, unsigned char *key);
//////////////////////////////////////////////////////////////////////
//功能: 计算lrc
//入口: pBuf: 缓冲区
// iBufLen:缓冲区长度
//返回: lrc值
//////////////////////////////////////////////////////////////////////
BYTE WINAPI LRC(BYTE *pBuf, int iBufLen);
/////////////////////////////////////////////////////////////////////////////
//功能: 异或操作,目的字符串 = 目的字符串和原字符串的异或
//入口: dest: 目的字符串
// source: 原字符串
// size: 长度
//出口: dest: 目的字符串
//
//返回:
//
/////////////////////////////////////////////////////////////////////////////
void WINAPI Do_XOR(unsigned char *dest, unsigned char *source, int size);
/////////////////////////////////////////////////////////////////////////////
//功能: 把BCD码串变成数字串(十六进制)
//入口: hex: 原字符串
// count: 原字符串长度
//出口: dsp: 目的字符串(必须是原字符串长度的2倍)
//
//返回:
//
/////////////////////////////////////////////////////////////////////////////
void WINAPI HEX_2_DSP(unsigned char *hex, unsigned char *dsp, int count);
/////////////////////////////////////////////////////////////////////////////
//功能: 把十六进制字符串变成BCD码
//入口: dsp: 原字符串
// count: 原字符串长度/2=目的字符串长度
//出口: hex: 目的字符串
//
//返回:
//
/////////////////////////////////////////////////////////////////////////////
void WINAPI DSP_2_HEX(unsigned char *dsp, unsigned char *hex, int count);
/////////////////////////////////////////////////////////////////////////////
//功能: 32位校验和
//参数: adler: 输入校验和
// buf: 字符串
// len: 字符串长度
//返回: 校验和值
//
//
/////////////////////////////////////////////////////////////////////////////
//unsigned long adler32(unsigned long adler, const BYTE *buf, unsigned int len);
/////////////////////////////////////////////////////////////////////////////
//功能: 压缩字符串,采用zlib、deflate格式压缩
//算法: RFC1950 (zlib format)
// RFC1951 (deflate format)
//参数: dest: 目的字符串
// destLen:目的字符串长度,应输入目的字符串最大长度
// 压缩成功返回时,是压缩结果长度
// source: 原字符串
// sourceLen: 原字符串长度
//返回: 成功=0
// 失败 <0
// -4: 内存不够
// -5: destLen 太小,调用时destlen要指出dest的长度
/////////////////////////////////////////////////////////////////////////////
int WINAPI CompressZ (BYTE *dest, unsigned long *destLen, const BYTE *source, unsigned long sourceLen);
/////////////////////////////////////////////////////////////////////////////
//功能: 解压缩字符串,采用zlib、deflate格式压缩
//算法: RFC1950 (zlib format)
// RFC1951 (deflate format)
//参数: dest: 目的字符串
// destLen:目的字符串长度,应输入目的字符串最大长度
// 解压缩成功返回时,是解压缩结果长度
// source: 原字符串
// sourceLen: 原字符串长度
//返回: 成功=0
// 失败 <0
// -4: 内存不够
// -5: destLen 太小,调用时destlen要指出dest的长度
/////////////////////////////////////////////////////////////////////////////
int WINAPI UnCompressZ (BYTE *dest, unsigned long *destLen, const BYTE *source, unsigned long sourceLen);
/////////////////////////////////////////////////////////////////////////////
//名称: CRC16
//功能: 16位CRC校验
//入口: szBuf: 字符串
// iLen: 字符串长度
// wCRC: 初始值
//
//返回: CRC16值
//
/////////////////////////////////////////////////////////////////////////////
WORD WINAPI CRC16(BYTE *ucbuf, int iLen, WORD wCRC);
/*
{
WORD CRCTable[256] =
{
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -