📄 des.h
字号:
// des.h : main header file for the DES DLL
//
#if !defined(AFX_DES_H__AD54EE49_A3F1_44CA_B06C_C8A87B67C7E1__INCLUDED_)
#define AFX_DES_H__AD54EE49_A3F1_44CA_B06C_C8A87B67C7E1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CDesApp
// See des.cpp for the implementation of this class
//
class CDesApp : public CWinApp
{
public:
CDesApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDesApp)
//}}AFX_VIRTUAL
//{{AFX_MSG(CDesApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/*****************************常用函数*************************/
/* 将一个十六进制字节串转换成 ASCII 码表示的字符串;
unsigned char *pHex -- 十六进制数字节串首地址;
unsigned char *pASSCHex -- 转换后的 ASCII 码表示的字符串的首地址;
注:转换后pASSCHex的长度是pHex的长度的两倍,所以要保证长度够用。
int nLen -- 要转换的十六进制数的长度(字节数)。
注: 转换后的结果全部是大写 ASSC 表示的十六进制数;
程序中不对 pHex 和 pASSCHex 的合法性进行检查;
也不对数组越界进行检查。
sample: "\x11\x22\x44\x66"->"11224466" nlen=4
*/
void HexToAscii(unsigned char * pHex, unsigned char * pASSCHex, int nLen);
////////////////////////////////////////////////////////////////////////////////////////////
// 功能: 将一个 ASSC 码表示的十六进制字符串转换成十六进制的字节串;
// 输入参数: pAscii -- 转换后的 ASCII 码表示的十六进制字符串的首地址;
// pHex -- 十六进制数字节串首地址;
// nLen -- 要转换的 ASCII 码表示的十六进制字符串的长度(字节数)。
// 输出参数: 空。
// 注: 要求输入的 ASCII 码表示的十六进制数的字符个数必须为偶数,因为 转换后结果的长度要减半。 除了是1 - 9 和 A(a) - F(f) 以外没有别的字符;
// 程序中不对 pAscii 和 pHex 的合法性进行检查;
// 也不对数组越界进行检查。
//长度不对,不是0-9 A-F a-f return false; else return true
//例 "11224455"->"\x11\x22\x44\x55" nlen=8
////////////////////////////////////////////////////////////////////////////////////////////
bool AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen);
/*
功能:CString 转换成 unsigned char *
输入:
str :为转换前的字符穿,字符个数必须是偶数
输出:
hex :为转换后的字节数组
hexlen:为转换后字节数组长度
返回值: 转换成功返回true,转换失败返回false
说明:转换前字符穿中的字符个数必须为偶数,否则转换失败。
此函数依赖于AsciiToHex(unsigned char * pAscii, unsigned char * pHex, int nLen)这个函数。
2006/07/21 修改说明:当转换前的字符串不是偶数个字符时,在前面补一个0;
作者:2006/07/14 姜玉雷
*/
bool StrToHex(CString str,unsigned char*hex, int & hexlen);
/*
功能:unsigned char* 转换成 CString
输入:
hex :转换前的字节数组
hexlen :转换前字节数组长度
输出:
str :转换后的字符串
说明:此函数依赖于HexToAscii(unsigned char * pHex, unsigned char * pASSCHex, int nLen)这个函数。
作者:2006/07/14 姜玉雷
*/
void HexToStr(unsigned char * hex,int hexlen, CString & str);
/*DES加密
dat:加密前的数据 和 加密后的数据 ,长度8字节;
key1:密钥;长度8字节
mode:加密模式 0加密;1解密;
*/
void des(BYTE *dat, BYTE *key1, BYTE mode);
/*TDES加密
dat:加密前的数据 和 加密后的数据;长度8字节
key1:密钥前8字节;
key2:密钥后8字节;
mode:加密模式 0加密;1解密;
*/
void tri_des(BYTE *dat, BYTE *key1, BYTE *key2, BYTE mode);
//异或运算
//A,B做异或运算结果放在 A 中
void xor(unsigned char *A,unsigned char *B,unsigned char L);
/****************************************************
* 计算MAC(通用) *
* Key:密钥(8字节/16字节) *
* d_input:计算MAC的输入数据(inputlen 字节) *
* inputlen:输入数据的长度 *
* PreData:初始数据(8字节) *
* FillInput: 0:不对输入数据补值 *
* 1:用80...00对输入数据补值 *
* T:0x01:单长度MAC计算(密钥8字节) *
* 0x02:双长度MAC计算(密钥16字节) *
* mac:计算结果MAC (4字节) *
*当Key:放到XDATA时会出错,原因未知 *
*****************************************************/
void TMAC(unsigned char *Key,unsigned char *d_input,BYTE inputlen,
unsigned char *PreData, bool FillInput, BYTE T, unsigned char *mac);
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DES_H__AD54EE49_A3F1_44CA_B06C_C8A87B67C7E1__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -