⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.h

📁 智能卡密钥加密
💻 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 + -