• ED/EP系列4《圈存指令》


    1. 圈存交易


       通过圈存交易,持卡人可将其在银行相应账户上的资金划入电子存折或电子钱包中。


    特点:

    1)--必须在金融终端上联机进行;

    2)--必须提交个人识别码(PIN)


    步骤:
    1) --终端: 启动账户划入交易(INITIALIZE FOR LOAD) 
    2) --IC卡: 处理INITIALIZE FOR LOAD命令,检查是否支持命令中提供的密钥(DLK)索引号(NO:9403),产生过程密钥(SESPK),产生MAC1
    3) --终端: 验证MAC1,主机将生成SESLK并确认MAC1是否有效。
    4) --回送错误状态:如果不接受圈存交易,则主机应通知终端
    5) --交易处理: 扣减圈存金额,产生一个报文鉴别码(MAC2)
    6) --发出“CREDIT FOR LOAD”命令:更新卡上电子存折或电子钱包余额 
    7) --IC卡: 验证MAC2(NO:9302).
    8) --交易处理: 电子存折联机交易序号或电子钱包联机交易序号加1,交易金额累加到余额上,更新交易明细
    9) --返回确认: IC卡将TAC回送给终端,主机可以 不马上验证TAC



    PIN=888888
    JE=00100000
    DLK=00000000000000000000000000000066	
    DTK=00000000000000000000000000000077
    CPURESET()
    00A40000023F00
    00A40000021001
    
    
    0020000003+PIN //校验密码
    805C000204(圈存前金额+9000)
    
    
    
    
    //圈存初始化: 密钥索引号(1字节)+ 交易金额(4字节)+ 终端机编号(6字节) 
    805000020B+01+JE+000000000001+10(XYSJ+9000)//P2:01->ED,02->EP
    
    
    JYE=COPY(XYSJ,1,8)   //ED或EP余额            4字节 
    JYXH=COPY(XYSJ,9,4)  //ED或EP联机交易序号    2字节 
                             //密钥版本号             1字节 
                             //算法标识               1字节 
    WSJS=COPY(XYSJ,17,8) //伪随机数               4字节 
    MAC1=LAST(XYSJ,8)     //MAC1                  4字节 
    
    
    
    
    ECB_3DES_EN(WSJS+JYXH+8000,DLK,SESLK)//过程密钥
    //验证MAC1: 旧余额(4字节)+交易金额(4字节) +交易类型(1字节)+终端机编号(6字节)
    3DES_MAC(0000000000000000+JYE+JE+02+000000000001+80,SESLK,_MAC1)//终端:验证MAC1
    3DES_MAC(0000000000000000+JE+02+000000000001+20100625+153030+800000000000,SESLK,MAC2)//终端:产生MAC2
    
    
    //金融圈存交易:CREDIT FOR LOAD
    805200000B+20100625+153030+MAC2+04(TAC+9000)//IC卡:验证MAC2
    
    
    //终端TAC: 新余额(4字节)+联机交易序号(2字节)+交易金额(4字节)+交易类型(1字节)+终端机编号(6字节)+交易日期(4字节)+交易时间(3字节) 
    3DES_MAC(0000000000000000+JYE+JYXH+JE+02+000000000001+20100625+153030,DTK,_TAC)
    
    
    805C000204(圈存后金额+9000)



    2. 圈提交易



       通过圈提交易,持卡人可以把电子存折中的部分或全部资金划回到其在银行的相应账户上。
       

    特点:

    1)--必须在金融终端上联机进行;
    2) --必须提交个人识别码(PIN)
    3) --只支持电子存折应用



    步骤:
    1) --终端:启动圈提交易(INITIALIZE FOR UNLOAD)  
    2) --IC卡:处理INITIALIZE FOR LOAD命令
    检查是否支持提供的密钥索引号(NO:9403)
    检查圈提金额是否超过电子存折余额
    产生一个伪随机数(ICC),过程密钥SESULK和一个报文签别码(MAC1)
    3) --主机:产生SESULK并验证MAC1是否有效 
    4) --主机:产生一个报文签别码(MAC2),以供IC卡对主机合法性进行检查
    5) --终端:向IC卡发出圈提(DEBIT FOR UNLOAD)命令
    6) --IC卡:验证MAC2(NO:9302)
    7) --IC卡:交易处理,并产生一个报文鉴别码(MAC3)
    8) --主机:验证 MAC3 

       

    CPURESET()
    00A40000023F00
    00A40000021001
    
    
    0020000003+888888 //校验密码
    805C000204(圈提前金额+9000)
    
    
    JE=00001000
    //INITIALIZE FOR UNLOAD 密钥索引号+交易金额+终端机编号
    805005010B+01+JE+000000000001+10(QTJY+9000)
    
    
    JYE=COPY(QTJY,1,8)    //ED余额               4字节 
    JYXH=COPY(QTJY,9,4)  //ED联机交易序号        2字节 
                             //密钥版本号            1字节 
                             //算法标识              1字节 
    WSJS=COPY(QTJY,17,8) //伪随机数              4字节 
    MAC1=LAST(QTJY,8)     //MAC1                 4字节 
    
    
    
    
    DULK=0971C9FD4D726CC5CEC80C67C69274E3
    //SESULK:伪随机数(ICC)||电子存折联机交易序号||‘8000’	
    ECB_3DES_EN(WSJS+JYXH+8000,DULK,SESLK)
    //验证MAC1: 旧余额(4字节)+交易金额(4字节) +交易类型(1字节)+终端机编号(6字节)
    3DES_MAC(0000000000000000+JYE+JE+03+000000000001+80,SESLK,_MAC1)//主机:验证MAC1
    3DES_MAC(0000000000000000+JE+03+000000000001+20100625+153030+800000000000,SESLK,MAC2)//主机:产生MAC2
    
    
    //金融圈提(DEBIT FOR UNLOAD)
    805403000B+20100625+153030+MAC2+04(MAC3+9000)//IC卡:验证MAC2
    
    
    805C000204(圈提后金额+9000)




    3. 取现交易



    特点:
    1) --必须在金融终端上进行,可以脱机处理
    2) --必须提交个人识别码(PIN)
    3) --只支持电子存折应用

        
    步骤:
    1) --终端:启动取现交易(INITIALIZE FOR CASH WITHDRAW)
    2) --IC卡:检查是否支持提供的密钥索引号(NO:9403),检查ED余额是否大于或等于交易金额,产生一个伪随机数(ICC)、一个过程密钥SESUK
    3) --终端: 终端发出消费/取现命令,
    4) --IC卡:验证MAC1。扣减取现交易金额,并将电子存折脱机交易序号加1,产生一个报文鉴别码(MAC2)
    5) --终端: 验证MAC2



    CPURESET()
    JE=00000001//消费金额
    DPK=7DAE5E53140A9170C21D5805EADB7E9A		
    
    
    00A40000021001
    0020000003+888888 //校验密码
    
    
    //初始化取现(INITIALIZE FOR CASH WITHDRAW)密钥索引号+交易金额+终端机编号
    805002010B+01+JE+000000000001(XYSJ2+9000)
    
    
    YE=COPY(XYSJ2,1,8)      //ED余额	            4
    TJJYXH=COPY(XYSJ2,9,4)  //ED脱机交易序号	    2
    YZXE=COPY(XYSJ2,13,6)   //透支限额	            3
                            //密钥版本号(DPK)	    1
                            //算法标识(DPK)	    1
    WSJS=COPY(XYSJ2,23,8)   //伪随机数(IC卡)	    4
    JYXH=0001
    
    
    
    
    //SESUK:伪随机数(ICC)||电子存折联机交易序号||‘8000’
    ECB_3DES_EN(WSJS+JYXH+8000,DPK,SESLK)
    
    
    //交易金额 + 交易类型标识 + 终端机编号 + 交易日期 + 交易时间
    3DES_MAC(0000000000000000+JE+000000000001+20090225+153030+80000000000000,SESLK,MAC1)
    805401000F+0000+JYXH+20110106+120000+MAC1+08(FHZ+9000)
    
    
                       //TAC	4
    WSJS=COPY(FHZ,9,8)//MAC2	4
    
    
    3DES_MAC(0000000000000000+JE+80000000,SESLK,_MAC2
    


    文/闫鑫原创   转载请注明出处http://blog.csdn.net/yxstars/article/details/38224903

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    笔记3
    笔记
    指令操作、例子
    python文件操作
    pandas处理excel
    Flask资源
    ImportError: DLL load failed while importing _ssl: 找不到指定的模块。 Failed
    WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
    selenium 安装与 chromedriver安装
    ubuntu 更换清华源
  • 原文地址:https://www.cnblogs.com/iplus/p/4467161.html
Copyright © 2020-2023  润新知