IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【python3】用sm2加密公钥,获取sm4密钥 -> 正文阅读

[Python知识库]【python3】用sm2加密公钥,获取sm4密钥

# -*- 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)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:17:51  更:2022-04-27 11:18:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:43:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码