当前位置: 首页 > news >正文

在SoC数据加解密验证中使用 Python 的 gmssl 库

在SoC数据加解密验证中使用 Python 的 gmssl 库

       摘要:本文提供了一个在UVM验证环境中使用 Python 的 gmssl 库重的完整示例,这种方式展示了良好的模块化设计,更换底层实现而无需修改调用方代码。


准备工作:安装 gmssl 库

首先,请确保您的 Python 环境中已经安装了 gmssl 库。如果尚未安装,请运行以下命令:

pip install gmssl

1. Python 脚本:sm4_crypto.py (使用 gmssl)

这是重写后的核心 Python 脚本。它使用 gmssl 库来执行 SM4 加密和解密,并通过标准输入/输出与 UVM 环境进行 JSON 格式的数据通信。

# sm4_crypto.py
import sys
import json
from gmssl import sm4def main():"""通过标准输入接收JSON数据,执行SM4加密或解密,并将结果以JSON格式输出到标准输出。"""try:# 从标准输入读取 JSON 格式的数据input_data = sys.stdin.read()data = json.loads(input_data)# 将十六进制字符串密钥和初始化向量转换为字节key = bytes.fromhex(data["key"])         # 128-bit (16 bytes) 密钥iv = bytes.fromhex(data["iv"])           # 128-bit (16 bytes) 初始化向量# 初始化 SM4 加密器crypt_sm4 = sm4.CryptSM4()output_json = {}# 判断是执行加密还是解密if "plaintext" in data:# --- 加密流程 ---plaintext = bytes.fromhex(data["plaintext"])# 设置加密密钥crypt_sm4.set_key(key, sm4.SM4_ENCRYPT)# 使用CBC模式进行加密,gmssl会自动处理填充ciphertext = crypt_sm4.crypt_cbc(iv, plaintext)# 准备输出的JSONoutput_json = {"ciphertext": ciphertext.hex()}elif "ciphertext" in data:# --- 解密流程 ---ciphertext = bytes.fromhex(data["ciphertext"])# 设置解密密钥crypt_sm4.set_key(key, sm4.SM4_DECRYPT)# 使用CBC模式进行解密,gmssl会自动处理填充decrypted_p
http://www.lryc.cn/news/581187.html

相关文章:

  • 【论文笔记】OctoThinker:突破 Llama 推理瓶颈的中期训练范式
  • web前端面试-- MVC、MVP、MVVM 架构模式对比
  • 硬件嵌入式工程师学习路线终极总结(二):Makefile用法及变量——你的项目“自动化指挥官”!
  • WEB攻防-文件包含LFIRFI伪协议编码算法无文件利用黑白盒
  • Go语言的web框架--gin
  • NX二次开发——NX二次开发-检查点是否在面上或者体上
  • MyChrome.exe与Selenium联动避坑指南:User Data目录冲突解决方案
  • 一篇文章快速入门TypeScript基础语法
  • 超详细yolov8/11-segment实例分割全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解
  • Zigbee/Thread
  • Xshell使用技巧
  • 七牛云前端面试题及参考答案 (上)
  • 2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇
  • C语言socket编程-补充
  • 测试时学习(TTT):打破传统推理界限的动态学习革命
  • vue router 里push方法重写为什么要重绑定this
  • JVM与JMM
  • RAL-2025 | 清华大学数字孪生驱动的机器人视觉导航!VR-Robo:面向视觉机器人导航与运动的现实-模拟-现实框架
  • rpgmaker android js常用属性解析
  • UI前端大数据可视化实战:如何设计高效的数据交互界面?
  • FLAN-T5:规模化指令微调的语言模型
  • 职坐标:AI图像识别NLP推荐算法实战
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
  • 针对工业触摸屏维修的系统指南和资源获取途径
  • Spring Bean 控制销毁顺序的方法总结
  • 408第三季part2 - 计算机网络 - 计算机网络分层结构
  • 【性能优化与架构调优(二)】高性能数据库设计与优化
  • 从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异
  • 深入理解Qt的SetWindowsFlags函数
  • Eureka、Nacos、LoadBalance、OpenFeign​之间的区别联系和协作 (附代码讲解)