• 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

  • 相关阅读:
    哪个项目管理工具好用到哭?JIRA VS 华为软件开发云
    华为软件开发云CloudIDE功能简测
    移动APP云测试平台测评分析
    华为软件开发云对比Jenkins-JavaWeb项目持续部署方式
    微服务究竟该如何理解
    如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
    如何将Android Studio与华为软件开发云代码仓库无缝对接(一)
    微服务,真的适合你么?
    如何更换git托管
    Redmine迁移至华为软件开发云-项目管理
  • 原文地址:https://www.cnblogs.com/klxll/p/3197429.html
Copyright © 2020-2023  润新知