表设计 上报流程

数据库新加字段
1 存储SE UID,SESM2key,SETempSM2key ，SE的UID,SE内的固定SM2公钥，SE内的临时SM2公钥。在表端回应请求协商密钥指令的时候会上报上来，存储后用于后续指令的加解密。
2 是否已协商密钥。用户判断当前表上报的数据或回应是否需要经过加密机加密后再解析（明文传输除外），以及待下发的数据是否要经过加密机加密

表初次上报数据为通过AES加密数据，此时没有协商密钥，且数据库中 是否已协商过密钥标志应为 否，
服务端下发 请求协商密钥的指令 调用WriteGetSEKey 获取指令（明文传输），表端回应的数据 为SEUID ,SE固定SM2公钥，SE临时SM2公钥。随机数。
通过调用加密机 导出协商密钥的接口  exportSm2MqvSeesionKey 获取 往SE写入协商密钥的APDU指令，通过调用UDPDataParse 的 下发协商密钥的 接口，组帧为完整的指令，下发给表端，根据表端回应的是否协商成功来更新  是否已协商密钥  的字段值。
表后续上报，则可根据是否已协商密钥的值来判断，直接下发其他指令	
	是否已协商密钥值为 0 否的时候，下发指令及解析表上报/回复 数据 时，接口中isEncry 为 1，表明需经过AES加密/解密
	是否已协商密钥值为 1 是的时候，下发指令及解析表上报/回复 数据 时，接口中isEncry 为 0，表明不需要经过AES加密/解密
是否需要经过加密机的 加密/解密 由业务系统服务判断，确保传入UDPDataParse的接口的数据为 明文/AES加密 状态

指令分类：
协商密钥，写入协商密钥 两条指令 为明文传输。
充值指令，为经过加密机 计算mac后，形成的一条直接对se的APDU指令，为明文帧后经由加密机加密数据库
其他指令，在没有协商密钥前，均AES方式加密 ，调用UDPDataParse接口时 Encrytype 值为1 ，经过协商密钥后 ，调用UDPDataParse接口时 值为0.



Python脚本接口：
目前使用到：
charge.py
createSm2.py
exportSm2.py
SeesionKey_decrypt.py
SeesionKey_encrypt.py
实际为一个，但调用只能调用其中一个函数，所以分了五个文件。

sm2_mqv_kdf_paras = {
    "Q_s_v_x": sys.argv[2][0:64],
    "Q_s_v_y": sys.argv[2][64:128],
    "Q_e_v_x": sys.argv[3][0:64],
    "Q_e_v_y": sys.argv[3][64:128],
    "ephemeral_key": 
    {
        "crv": "sm2p256v1",
        "d": "64F5EE3AE534F98091291843A684735AA1B58EF2460B9FE2D8E3E0988A2C2270DB7D583C050FD34FB027340C510CBBA9",
        "kty": "SM2",
        "x": "61CA3CBCAA5226A565A4D49ECF3D4AF46E1EAFE8EDF3F064CE991C3DD771C293",
        "y": "3ACF3F3D4CE5C4675223DC32473E210C9752B47088FD94E46181A907A1527E39"
    }
}

#Q_s_v_x SE静态公钥X   E23392C0BC4073194A05388B43701C538652FF396FD42E681037D83134751463
#Q_s_v_y SE静态公钥Y   DC64BF2F968FF23371DB6A9D05FBA2882149D33DA6A668B7271F939D5421DE5A

#Q_e_v_x SE临时公钥X   C758D7B1AD9BC9F22930D31CCF636CB520ADDC37A34E44B070F0001FC4B4110C
#Q_e_v_y SE临时公钥Y   C5C8E749645E36F9415CD502BEBE184A607C311B17E5506C2D1D6524B446E755
#ephemeral_key 使用createSm2接口创建的后台临时密钥对 
临时密钥对设定为固定值 
存储于py脚本中, 
奥枫修改为java调用接口的情况下 
需要设计数据库存储。

导出SM2协商密钥： exportSm2MqvSeesionKey （加密：\x13\x07\x02\x04   解密：\x13\x09\x02\x04） 需生成两条APDU，需要随机数计算mac,
充值：charge ，需要随机数计算mac 目前设计为每次表上报数据中带有随机数 业务系统判断 如果有充值指令则首先下发充值指令，目的为减少交互次数，因为SE中随机数有时效性，如果充值之前下发其他指令会导致上报带有的随机数失效。
加密：SeesionKey_encrypt.py  需要 sm2_mqv_kdf_paras  seuid   需确保加密数据为16字节的整数倍
解密：SeesionKey_decrypt.py  需要 sm2_mqv_kdf_paras  seuid   需确保解密数据为16字节的整数倍
创建临时SM2:createSm2.py 返回值为上面的 #ephemeral_key 
