# -*- coding:utf-8 -*- from common.request import Request import json import setting from common.base import get_time,log_info from gmssl import sm2 from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT import binascii import base64
class Base(Request): ? ? def base(self,data,function_url): ? ? ? ? #注册用户
? ? ? ? url = setting.plat_base_url + function_url
? ? ? ? TimeStamp = get_time() ? ? ? ? header = { ? ? ? ? ? ? "Content-Type":"application/json","Authorization":"Basic d2ViOjEyMzQ1Ng==" ? ? ? ? } ? ? ? ? response = self.sendMsg_POST(url,json.dumps(data),header) ? ? ? ? #response = self.sendMsg_GET(url,data)
? ? ? ? return json.loads(response)
def print_hex(bytes): ? ? ''' ? ? 在Python3下打印出十六进制字节串,并补零 ? ? ''' ? ? l = [] ? ? for i in bytes: ? ? ? ? i = hex(int(i)) # ? ? ? ? print(i) ? ? ? ? if len(i) < 4: ? ? ? ? ? ? i = i[:2] + '0' + i[2:] ? ? ? ? l.append(i) ? ? result=[] ? ? for j in l: ? ? ? ? aa = j.split('0x')[1] ? ? ? ? result.append(aa) ? ? result_str='' ? ? for k in result: ? ? ? ? result_str+=k ? ? return result_str
if __name__ == '__main__': ? ? ? ? log_info("开始执行获取后台加密公钥") ? ? ? ? log_info("定义URL") ? ? ? ? function_url = '/open/identity/session' ? ? ? ? log_info("定义发送数据") ? ? ? ? data = { ? ? ? ? } ? ? ? ? log_info("发送接口请求") ? ? ? ? result = Base().base(data,function_url) ? ? ? ? log_info("判断接口返回结果") ? ? ? ? if result['code'] != 20000: ? ? ? ? ? ? log_info("获取后台加密公钥执行失败") ? ? ? ? ? ? assert False,"返回错误信息:" + str(result) ? ? ? ? else: ? ? ? ? ? ? log_info("获取后台加密公钥用例执行成功")
? ? ? ? public_key = result['data']['publicKey'] ? ? ? ? #print('public_key:',public_key) ? ? ? ? sessionId = result['data']['sessionId']
? ? ? ? # sm2的公私钥 ? ? ? ? SM2_PRIVATE_KEY = '66eb9263d349f472971aba2254ea19381c17fd462193d9fb12361335b2ae634f' ? ? ? ? #加前缀04 ? ? ? ? SM2_PUBLIC_KEY = '04'+'677f138898e9fef7e85227822f4a76208b508ebfc03c9682deb7488efa86f8fbbba074f66fcbd3fe08cd2cd4745e3e92c5ba64c626261bcc58279e6b9639f310'
? ? ? ? public_key = public_key.split('04', 1)[-1] ? ? ? ? print(public_key) ? ? ? ? sm2_crypt = sm2.CryptSM2(public_key=public_key, private_key=None) ? ? ? ? encode_info = sm2_crypt.encrypt(SM2_PUBLIC_KEY.encode(encoding="utf-8")) ? ? ? ? #print(encode_info ) ? ? ? ? #encode_info1 = print_hex(encode_info) ? ? ? ? encode_info1 = binascii.b2a_hex(encode_info).decode('unicode_escape') ? ? ? ? #print('encode_info1:',encode_info1) ? ? ? ? #encode_info2 = base64.b16encode(encode_info) ? ? ? ? #print('encode_info2:',encode_info2)
? ? ? ? log_info("开始执行获取SM4密钥") ? ? ? ? log_info("定义URL") ? ? ? ? function_url = '/open/identity/exchange' ? ? ? ? log_info("定义发送数据") ? ? ? ? data = { ? ? ? ? ? ? "confidential":"04"+encode_info1, ? ? ? ? ? ? "sessionId":sessionId ? ? ? ? } ? ? ? ? print(data) ? ? ? ? log_info("发送接口请求") ? ? ? ? result = Base().base(data,function_url) ? ? ? ? log_info("判断接口返回结果") ? ? ? ? if result['code'] != 20000: ? ? ? ? ? ? log_info("获取SM4密钥失败") ? ? ? ? ? ? assert False,"返回错误信息:" + str(result) ? ? ? ? else: ? ? ? ? ? ? log_info("获取SM4密钥用例执行成功")
? ? ? ? get_private_key = result["data"].split('04', 1)[-1] ? ? ? ? print(get_private_key.encode(encoding="utf-8")) ? ? ? ? sm2_crypt = sm2.CryptSM2(public_key=None, private_key=SM2_PRIVATE_KEY) ? ? ? ? sm4_private_key = sm2_crypt.decrypt( get_private_key.encode(encoding="utf-8") )#.decode(encoding="utf-8") ? ? ? ? print('sm4_private_key:',base64.b16encode(sm4_private_key).decode(encoding="utf-8") )
? ? ? ? sm4_key = base64.b16encode(sm4_private_key)
? ? ? ? crypt_sm4 = CryptSM4() ? ? ? ? crypt_sm4.set_key(sm4_key, SM4_ENCRYPT)
? ? ? ? encrypt_value = crypt_sm4.crypt_ecb(b'root') ? ? ? ? print('root:',base64.b16encode(encrypt_value).decode(encoding="utf-8"))
? ? ? ? encrypt_value = crypt_sm4.crypt_ecb(b'Abc@123') ? ? ? ? print('password:',base64.b16encode(encrypt_value).decode(encoding="utf-8"))
#print(result)
|