DES MAC PIN HEX
/* void DesEncrypt( UCHAR * auchInput,UCHAR * auchKey,UCHAR * auchOutput=NULL); Function: DesEncrypt 将64位报文加密 In Parameter: auchInput UCHAR[8] 需做加密的包文 auchKey UCHAR[8] key used for des Out Parameter: auchOutput UCHAR[8] 加密后的包文 为NULL时,加密的包文放在 auchInput Return: 无 */ /* void DesDecrypt( UCHAR * auchInput,UCHAR * auchKey,UCHAR * auchOutput=NULL); Function: DesDecrypt 将64位报文解密 In Parameter: auchInput UCHAR[8] 需做解密的包文 auchKey UCHAR[8] key used for des Out Parameter: auchOutput UCHAR[8] 解密后的包文 为NULL时,解密的包文放在 auchInput Return: 无 */ /* void TripleEncrypt( UCHAR * source,UCHAR * key,UCHAR * dest=NULL); Function: TripleEncrypt 将64位报文用TripleDes算法加密 In Parameter: source UCHAR[8] 需做加密的包文 key UCHAR[16] key used for TripleDes Out Parameter: dest UCHAR[8] 加密后的包文 为NULL时,加密的包文放在 source Return: 无 */ /* void TripleDecrypt( UCHAR * source,UCHAR * key,UCHAR * dest=NULL); Function: TripleDecrypt 将64位报文用TripleDes算法解密 In Parameter: source UCHAR[8] 需做解密的包文 key UCHAR[16] key used for TripleDes Out Parameter: dest UCHAR[8] 解密后的包文 为NULL时,解密的包文放在 source Return: 无 */ /* long DesEncryptData(UCHAR * pInBuff, long Buflen, UCHAR * pDesKey, UCHAR * pOutBuff=NULL); Function: DesEncryptData 将通信报文加密,算法: 首先将pInBuff数据分成若干个64位的数据段,最后一个数据段(N) 不足64位的在后面加零补够64位。然后计算密文=DES(DES-KEY, 数据段1)+DES(DES-KEY,数据段2)+ …… DES(DES-KEY,数据段N) In Parameter: pInBuff UCHAR[Buflen] 需做加密的包文 Buflen long 做加密包文的长度, pDesKey UCHAR[8] key used for des Out Parameter: pOutBuff UCHAR[(Buflen-1)/8*8+8] 加密后的包文 为NULL时,加密的包文放在 pInBuff Return: 密文长度 */ /* long DesDecryptData(UCHAR * pInBuff, long Buflen, UCHAR * pDesKey, UCHAR * pOutBuff=NULL); Function: DesDecryptData 将通信报文解密,算法: 首先将pInBuff数据分成若干个64位的数据段,最后一个数据段(N) 不足64位则报文出错。然后计算明文=UNDES(DES-KEY, 数据段1)+UNDES(DES-KEY,数据段2)+ …… UNDES(DES-KEY,数据段N) In Parameter: pInBuff UCHAR[Buflen] 需做解密的包文 Buflen long 做解密包文的长度, pDesKey UCHAR[8] key used for des Out Parameter: pOutBuff UCHAR[Buflen] 解密后的包文 为NULL时 解密的包文放在 pInBuff Return: 明文长度,-1出错 */ /* void XOR(UCHAR *source, UCHAR *dest,long size); Function: XOR 将source 与 dest 异或运算,结果存放在dest中 In Parameter: source UCHAR[size] 需做异或的包文 dest UCHAR[size] 需做异或的包文,结果存放在此 size long 做异或包文的长度 Out Parameter: dest UCHAR[size] 结果存放在此 Return: 无 */ /* void DSP_2_HEX(UCHAR * dsp, UCHAR * hex,long count); Function: DSP_2_HEX dsp data to hex(binary) data for example: dsp="1A2B3344",count=4,hex={0x1A,0x2B,0x33,0x44}; In Parameter: dsp UCHAR[2*count] dsp data count long Out Parameter: hex UCHAR[count] hex data Return: No return */ /* void HEX_2_DSP(UCHAR * hex, UCHAR * dsp,long count); Function: HEX_2_DSP hex(binary) data to dsp data for example: hex={0x1A,0x2B,0x33,0x44},count=4,dsp="1A2B3344"; In Parameter: hex UCHAR[count] hex data count long Out Parameter: dsp UCHAR[2*count+1] dsp data 以null字符结束 Return: No return */ /* void GetBPIMac(UCHAR * pBuff, long Buflen, UCHAR * pMacKey, UCHAR * pMac); Function: GetBPIMac 得到通信BPI 方式MAC值,算法: 首先将pBuff数据分成若干个64位的数据段,最后一个数据段(N) 不足64位的在后面加零补够64位。然后计算MAC=DES(MAC-KEY, (((数据段1 XOR 数据段2)XOR 数据段3)…… 数据段N)) 如果pMacKey值为NULL,则不做DES,只异或,此时与GetSTDMac函数结果相同 In Parameter: pBuff UCHAR[Buflen] 需做MAC的包文 Buflen long 做MAC包文的长度(不含MAC), pMacKey UCHAR[8] key used for mac Out Parameter: pMac UCHAR[8] Mac value Return: 无 */ /* void GetSTDMac(UCHAR * pBuff, long Buflen, UCHAR * pMacKey, UCHAR * pMac); Function: GetSTDMac 得到通信STAND 方式MAC值,算法: 首先将pBuff数据分成若干个64位的数据段,最后一个数据段(N) 不足64位的 在后面加零补够64位。然后计算MAC=DES(MAC_KEY,…… DES(MAC-KEY, DES(MAC-KEY,DES(MAC-KEY,数据段1) XOR 数据段2)XOR 数据段3)…… 数据段N) 如果pMacKey值为NULL,则不做DES,只异或,此时与GetBPIMac函数结果相同 In Parameter: pBuff UCHAR[Buflen] 需做MAC的包文 Buflen long 做MAC包文的长度(不含MAC), pMacKey UCHAR[8] key used for mac Out Parameter: pMac UCHAR[8] Mac value Return: 无 */ /* void EncryptPin(UCHAR *cardno,UCHAR *pin,UCHAR * PinKey,UCHAR *encrypt_pin); Function: EncryptPin 密码处理 ※ ANSI X9.8密码加密: 1. 将卡号去校验位,取右12位。如5309833221044200,取下画部分,前拼4个0得到CARDNO,结果为:0000983322104420。 2. 将PINPAD输入的密码正文拼接,得06??????FFFFFFFF, 04????FFFFFFFFFF 3. 先将1、2步所得压缩为Hex,再异或得PAN。 4. DES(PIN--BLOCK-KEY ,PAN)结果即为加密后的PIN-BLOCK; In Parameter: cardno UCHAR 卡号,以null字符结束 pin UCHAR 密码,以null字符结束 PinKey UCHAR[8] key used for des pin Out Parameter: encrypt_pin UCHAR[8] 加密后的pin值 Return: 无 */ /* void DecryptPin(UCHAR *cardno,UCHAR *encrypt_pin,UCHAR * PinKey,UCHAR *pin); Function: DecryptPin 密码处理 ※ ANSI X9.8密码解密: 1. 将卡号去校验位,取右12位。如5309833221044200,取下画部分,前拼4个0得到CARDNO,结果为:0000983322104420。 2. PAN=UNDES(PinKey,encrypt_pin) 3. 先将1步所得压缩为Hex,与PAN异或得PAD。 4. 将PAD作HEX_2_DSP解压缩得PINPAD 5. 根据PINPAD提取密码,如06??????FFFFFFFF,提取06后6个字符为密码, 04????FFFFFFFFFF,提取04后4个字符为密码 In Parameter: cardno UCHAR 卡号,以null字符结束 encrypt_pin UCHAR[8] 加密后的pin值 PinKey UCHAR[8] key used for undes pin Out Parameter: pin UCHAR 密码,以null字符结束 Return: 无 */ /* void GenerateKey(UCHAR * pKey); Function: GenerateKey 随机生成密钥 In Parameter: 无 Out Parameter: pKey UCHAR[8] 随机生成的密钥 */
https://files.cnblogs.com/klxll/libdes.zip //动态库
chawor 07/18/03