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

python 实现客户端软件许可证书签名授权 cryptography

目录

1.需求

2.cryptography介绍

3.实际代码

4.结束语


1.需求

        采用pyside6开发了一款客户端软件, 为保护核心算法源码, 采用Nuitka打包python代码,这仅仅保护了核心算法代码,不能限制用户使用软件,因此需要软件许可授权签名证书,python cryptography库是一个最优推荐!

        本文着重使用private_key.sign签名,可设置mac地址列表、模块列表、到期日期等信息!

2.cryptography介绍

       底层基于openssl,不需要单独安装openssl,直接pip install cryptography即可

        用途1加密-解密(数据保密,确保只有私钥拥有者解密),应用场景:加密传输对称密钥、加密敏感配置信息、安全消息传递;使用public_key.encrypt()加密,private_key.decrypt()解密

        用途2签名(数据完整性验证、身份验证);应用场景:软件许可证签名、数字合同签名、SSL/TLS证书,使用private_key.sign()

3.实际代码

        其它函数自行问deepseek、cursor等大模型,还有搜索教程!官网文档看不懂

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes, serialization
import json
from base64 import b64encode, b64decode# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=4096)
public_key = private_key.public_key()# 保存私钥(bytes)
private_pem = private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.TraditionalOpenSSL,encryption_algorithm=serialization.BestAvailableEncryption(password=b"123456")
)with open('private_key.pem', 'wb') as f:f.write(private_pem)# 保存公钥(不推荐)
public_pem = public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo
)
with open('public_key.pem', 'wb') as f:f.write(public_pem)
# 加载公钥(不推荐)
with open('public_key.pem', 'rb') as f:public_key = serialization.load_pem_public_key(f.read())
###########################################################################
上面为创建私钥、公钥,保存到本地;然后后续仅读取本地私钥即可,再用私钥创建公钥(推荐)用私钥签名,保存相关数据签名到license.lc
###########################################################################
# 加载私钥
with open('private_key.pem', 'rb') as f:private_key = serialization.load_pem_private_key(f.read(),password=b"Aa123456")public_key = private_key.public_key()# 用私钥签名许可证数据
license_data = {"mac": "用户机器mac地址","expiry_date": "2024-12-31",
}signature = private_key.sign(json.dumps(license_data).encode(),padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256()
)
print(signature)license = {"data": license_data,"signature": b64encode(signature).decode(),"public_key": b64encode(public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo)).decode()
}with open("./license.lc", 'w') as f:json.dump(license, f)
###########################################################################
客户端加载代码,实现签名授权[将lc文件放到软件指定路径下]
###########################################################################
with open("./license.lc", "r") as f:license = json.load(f)from cryptography.exceptions import InvalidSignaturepublic_key = serialization.load_pem_public_key(b64decode(license["public_key"])
)try:public_key.verify(b64decode(license["signature"]),json.dumps(license["data"]).encode(),padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256())print("签名验证通过")
except InvalidSignature:print("无效签名!许可证可能被篡改")

4.结束语

        通过签名授权证书,可以授权软件使用、到期、绑定mac地址、模块权限

相关文章:

python 实现客户端软件许可证书签名授权 cryptography

目录 1.需求 2.cryptography介绍 3.实际代码 4.结束语 1.需求 采用pyside6开发了一款客户端软件, 为保护核心算法源码, 采用Nuitka打包python代码,这仅仅保护了核心算法代码,不能限制用户使用软件,因此需要软件许可授权签名证书&#xff…...

明远智睿SD2351核心板:以48元撬动AI视觉产业革命的“硬核引擎”

在人工智能浪潮席卷全球的今天,AI视觉作为连接虚拟与现实的“智慧之眼”,正以惊人的速度重塑着产业格局。从智慧城市中的安防监控到自动驾驶汽车的“视觉神经”,从工业产线的缺陷检测到家庭场景的智能管家,AI视觉技术的每一次突破…...

【C语言】全局变量、静态本地变量

在C语言中,变量是存储数据的基本单元。 不同类型的变量有着不同的特性和用途,其中全局变量和本地变量是比较特殊且重要的两类变量。 一、全部变量 1.1 全局变量的作用域和生存期 全局变量是在函数外部定义的变量,其作用域从定义的位置开始&…...

32.768kHz晶振详解:作用、特性及与其他晶振的区别

一、32.768kHz晶振的核心作用 实时时钟(RTC)驱动: 提供精确的1Hz时钟信号,用于计时功能(如电子表、计算机CMOS时钟)。 分频公式: 1Hz 32.768kHz / 2^15(通过15级二分频实现&#x…...

classfinal 修改过源码,支持jdk17 + spring boot 3.2.8

先贴图 使用 classfinal 修改过源码 支持jdk17 spring boot 3.3.0 使用方式: 1、springboot的jar加密 java -jar classfinal-fatjar-1.2.1.jar -file MySpringBoot.jar -libjars my-common.jar -packages cn.com.cmd -pwd 123456 -Y 得到: MySpri…...

算法训练营 Day1

努力追上那个曾经被寄予厚望的自己 —— 25.4.25 一、LeetCode_26 删除有序数组中的重复项 给你⼀个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现⼀次 ,返回删除后数组的 新⻓度。元素的 相对顺序 应该保持 ⼀致 …...

4/25 研0学习日志

Python学习 python 4个常用的数据容器 list dict tuple set list 列表中数据类型可以不一样 构造方式 mylist["xxx","xxxx"] 获取数据方式 mylist[1] mylist[:4] mylist[-1:] 添加数据 mylist.append() mylist.extern(["aaa","aaaa&…...

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段

手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段 --本地AI电话机器人 前言 书接上一篇,《手机打电话通话时如何向对方播放录制的IVR引导词声音》中介绍了【蓝牙电话SDK示例App】可以实现手机app在电话通话过程中插播预先录制的开场白等语音片段的功能。…...

汽车零配件供应商如何通过EDI与主机厂生产采购流程结合

当前,全球汽车产业正经历深刻的数字化转型,供应链协同模式迎来全新变革。作为产业链核心环节,汽车零部件供应商与主机厂的高效对接已成为企业发展的战略要务。然而,面对主机厂日益严格的数字化采购要求,许多供应商在ED…...

sql server 开启cdc报事务正在执行

今天开启数据库cdc 功能的时候提示:一个dbrole 的存储过程,rolemember cdc db_ower, ,有事务正在进行,执行失败。 执行多次仍然如此,开启cdc的存储过程是sys.sp_cdc_enable_db;查询了一下网络,给出的方…...

03实战篇Redis02(优惠卷秒杀、分布式锁)

3、优惠卷秒杀 3.1 -全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析&…...

ECharts 地图开发入门

一、准备工作&#xff1a;环境搭建与数据准备​ 1. 引入 ECharts 库​ ​ TypeScript 取消自动换行复制 <!-- 引入 ECharts 核心库 -->​ <script src"https://cdn.jsdelivr.net/npm/echarts5.4.0/dist/echarts.min.js"></script>​ <!-…...

机器学习基础 - 回归模型之线性回归

机器学习: 线性回归 文章目录 机器学习: 线性回归1. 线性回归1. 简介2. 线性回归如何训练?1. 损失函数2. 正规方程3. 梯度下降法4. 两种方法的比较2. 岭回归岭回归与线性回归3. Lasso 回归4. ElasticNet 回归LWR - 局部加权回归QA1. 最小二乘法估计2. 最小二乘法的几何解释3…...

《解锁LLMs from scratch:开启大语言模型的探索之旅》

《解锁LLMs from scratch:开启大语言模型的探索之旅》 GitHub - datawhalechina/llms-from-scratch-cn: 仅需Python基础,从0构建大语言模型;从0逐步构建GLM4\Llama3\RWKV6, 深入理解大模型原理 项目首页 - LLMs-from-scratch:从零开始逐步指导开发者构建自己的大型语言模型…...

嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧

在嵌入式面试中&#xff0c;C 语言基础是重中之重。本文针对经典面试题进行详细解析&#xff0c;帮助新手系统掌握知识点&#xff0c;提升面试应对能力。 一、数据结构逻辑分类 题目 在数据结构中&#xff0c;从逻辑上可以把数据结构分为&#xff08; &#xff09;。 A、动态…...

pyqt中以鼠标所在位置为锚点缩放图片

在编写涉及到图片缩放的pyqt程序时&#xff0c;如果以鼠标为锚点缩放图片&#xff0c;图片上处于鼠标所在位置的点&#xff08;通常也是用户关注的图片上的点&#xff09;不会移动&#xff0c;更不会消失在图片显示区域之外&#xff0c;可以提高用户体验&#xff0c;是一个值得…...

登高架设作业证考试的实操项目有哪些?

登高架设作业证考试的实操项目分为 4 个科目&#xff0c;包括安全防护用品使用、作业现场安全隐患排除、安全操作技术、作业现场应急处置&#xff0c;具体内容如下&#xff1a; 科目一&#xff1a;安全防护用品使用&#xff08;K1&#xff09; 考试项目&#xff1a;安全帽、安全…...

闻性与空性:从耳根圆通到究竟解脱的禅修路径

一、闻性之不动&#xff1a;超越动静的觉性本质 在《楞严经》中&#xff0c;佛陀以钟声为喻揭示闻性的奥秘&#xff1a;钟声起时&#xff0c;闻性显现&#xff1b;钟声歇时&#xff0c;闻性不灭。此“不动”并非如磐石般凝固&#xff0c;而是指觉性本身超越生灭、来去的绝对性…...

404了怎么办快把路由给我断掉(React配置路由)

路由基础概念 什么是前端路由&#xff1f; 核心作用&#xff1a;管理单页面应用的页面切换主要功能&#xff1a; 根据URL显示对应组件 保持浏览器历史记录 实现页面间导航不刷新 React Router 包含三个主要包&#xff1a; react-router&#xff1a;核心逻辑react-router-d…...

React类组件与React Hooks写法对比

React 类组件 vs Hooks 写法对比 分类类组件&#xff08;Class Components&#xff09;函数组件 Hooks组件定义class Component extends React.Componentconst Component () > {}状态管理this.state this.setState()useState()生命周期componentDidMount, componentDidU…...

Tailwind CSS实战:快速构建定制化UI的新思路

引言 在当今快节奏的前端开发环境中&#xff0c;开发者不断寻找能够提高效率并保持灵活性的工具。Tailwind CSS作为一个功能型优先的CSS框架&#xff0c;正在改变开发者构建用户界面的方式。与Bootstrap和Material UI等传统组件库不同&#xff0c;Tailwind不提供预设组件&…...

告别手动映射:在 Spring Boot 3 中优雅集成 MapStruct

在日常的后端开发中&#xff0c;我们经常需要在不同的对象之间进行数据转换&#xff0c;例如将数据库实体&#xff08;Entity&#xff09;转换为数据传输对象&#xff08;DTO&#xff09;发送给前端&#xff0c;或者将接收到的 DTO 转换为实体进行业务处理或持久化。手动进行这…...

JavaScript学习教程,从入门到精通,Ajax数据交换格式与跨域处理(26)

Ajax数据交换格式与跨域处理 一、Ajax数据交换格式 1. XML (eXtensible Markup Language) XML是一种标记语言&#xff0c;类似于HTML但更加灵活&#xff0c;允许用户自定义标签。 特点&#xff1a; 可扩展性强结构清晰数据与表现分离文件体积相对较大 示例代码&#xff1…...

抖音IP属地跟无线网有关系吗?一文解析

在抖音等社交平台上&#xff0c;IP属地显示功能让许多用户感到好奇——为什么自己的位置信息有时准确&#xff0c;有时却显示在其他城市&#xff1f;这时&#xff0c;用户会疑惑&#xff1a;抖音IP属地跟无线网有关系吗&#xff1f;本文将详细解析‌IP属地‌和‌无线网‌的概念…...

RDK X3新玩法:超沉浸下棋机器人开发日记

一、项目介绍 产品中文名&#xff1a;超沉浸式智能移动下棋机器人 产品英文名&#xff1a;Hackathon-TTT 产品概念&#xff1a;本项目研发的下棋机器人&#xff0c;是一款能自主移动、具备语音交互并能和玩家在真实的棋盘上进行“人机博弈”的移动下棋平台&#xff0c;能够带给…...

Trae 实测:AI 助力前端开发,替代工具还远吗?

Trae 实测&#xff1a;AI 助力前端开发&#xff0c;替代工具还远吗&#xff1f; 字节上线了一款 AI 新产品&#xff0c;名叫 Trae 。这是一款 IDE 工具&#xff0c;中文意思是「集成开发环境」&#xff0c;做技术的读者对此应该很熟悉。简单理解&#xff0c;就是程序员用来写代…...

SpringCloud基于Eureka和Feign实现一个微服务系统

Spring Cloud 是基于 Spring Boot 的 ‌微服务开发全栈解决方案‌,通过集成多种开源组件,提供分布式系统构建所需的服务治理、配置管理、容错机制‌等核心能力,简化微服务架构的复杂性。其核心目标是实现服务间的高效协同与弹性伸缩,支撑企业级云原生应用开发。Spring Clou…...

nacos设置权重进行负载均衡不生效

nacos设置权重进行负载均衡不生效&#xff0c;必须在启动类下加上这个bean Beanpublic IRule nacosRule(){return new NacosRule();}如下图所示...

Flowable7.x学习笔记(十四)查看部署流程Bpmn2.0-xml

前言 Flowable 在其前端 Modeler 中&#xff0c;采用 BPMN 2.0 标准将流程中的任务、网关、事件等元素以 XML 形式存储&#xff0c;并附带图形互换&#xff08;Diagram Interchange&#xff0c;DI&#xff09;数据&#xff0c;以保证在前端与后端都能精准重建可视化流程图。 生…...

大模型应用中Agent2Agent(A2A)的应用场景,以及A2A与MCP的区别和适用场景

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下大模型应用中Agent2Agent&#xff08;A2A&#xff09;的应用场景&#xff0c;以及A2A与MCP的区别和适用场景。 文章目录 一、引言二、Agent2Agent&#xff08;A2A&#xff09;协议原理2.1 核心架构2.2 基础框架与依…...

Windows server:

企鹅裙&#xff1a;429603659 域搭建 (细节上的问题) 1.将IP地址修改为静态IP&#xff0c;搭建完后设置DNS为本身(在搭建完域服务器后设置DNS) 2.配置之前需将计算机名更改为后面题目中所要求的. 3&#xff0e;一些版本之中比如Windows Server2012之中搭建域之后重启会显示…...

Python 3.14:探索新版本的魅力与革新

在Python编程语言的不断演进中&#xff0c;Python 3.14作为又一重要里程碑&#xff0c;承载着开发者们的期待与热情&#xff0c;悄然走进了我们的视野。尽管在撰写本文时&#xff0c;Python 3.14可能尚未正式成为主流版本&#xff08;注&#xff1a;实际发布情况需根据最新信息…...

LabVIEW基于VI Server的控件引用操作

本 VI 通过展示控件引用&#xff08;Control References&#xff09;的使用&#xff0c;借助 VI Server 实现对前面板对象的编程操作。 ​ 详细说明 隐式属性节点&#xff08;Implicitly Linked Property Node&#xff09;&#xff1a;通过右键单击控件&#xff08;或其控件终…...

【不同名字的yolo的yaml文件名是什么意思】

以下是这些 YOLO 系列配置文件的详细解析&#xff0c;按版本和功能分类说明&#xff1a; 一、YOLOv3 系列 文件名核心特性适用场景yolov3.yaml原始 YOLOv3 结构&#xff0c;3 尺度预测&#xff08;13x13,26x26,52x52&#xff09;通用目标检测yolov3-spp.yaml增加 SPP&#xff…...

《100天精通Python——基础篇 2025 第3天:变量与数据类型全面解析,掌握Python核心语法》

目录 一、Python变量的定义和使用二、Python整数类型&#xff08;int&#xff09;详解三、Python小数/浮点数&#xff08;float&#xff09;类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…...

精益数据分析(24/126):聚焦第一关键指标,驱动创业成功

精益数据分析&#xff08;24/126&#xff09;&#xff1a;聚焦第一关键指标&#xff0c;驱动创业成功 在创业和数据分析的探索之旅中&#xff0c;我们都在不断寻找能够助力成功的关键因素。今天&#xff0c;我依旧带着与大家共同进步的初心&#xff0c;深入解读《精益数据分析…...

【刷题Day26】Linux命令、分段分页和中断(浅)

说下你常用的 Linux 命令&#xff1f; 文件与目录操作&#xff1a; ls&#xff1a;列出当前目录的文件和子目录&#xff0c;常用参数如-l&#xff08;详细信息&#xff09;、-a&#xff08;包括隐藏文件&#xff09;cd&#xff1a;切换目录&#xff0c;用于在文件系统中导航m…...

互联网实验室的质量管控痛点 质检LIMS系统在互联网企业的应用

在互联网行业流量红利消退与用户体验至上的时代背景下&#xff0c;产品迭代速度与质量稳定性成为企业核心竞争力的分水岭。传统测试实验室依赖人工操作、碎片化工具与线下沟通的管理模式&#xff0c;已难以应对敏捷开发、多端适配、数据安全等复合型挑战。 一、互联网实验室的…...

VScode远程连接服务器(免密登录)

一、本机生成密钥对 本地终端输入ssh-keygen&#xff0c;生成公钥&#xff08;id_rsa.pub&#xff09;和私钥&#xff08;id_rsa&#xff09; 二、在远程服务器根目录的.ssh文件夹的authorized_keys中输入id_rsa的内容 三、修改vscode的config文件.ssh/config&#xff0c;加…...

【Go语言】RPC 使用指南(初学者版)

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;允许程序调用另一台计算机上的子程序&#xff0c;就像调用本地程序一样。Go 语言内置了 RPC 支持&#xff0c;下面我会详细介绍如何使用。 一、基本概念 在 Go 中&…...

安卓四大组件之ContentProvider

目录 实现步骤 代码分析 onCreate insert query ContextHolder Cursor 作用与用法 基本步骤&#xff1a; 可能的面试题&#xff1a;为什么使用Cursor&#xff1f; 为什么使用Cursor 使用Cursor的好处 静态内部类实现单例模式 AnndroidManifest.xml配置信息 注释的…...

C#中实现XML解析器

XML&#xff08;可扩展标记语言&#xff09;是一种广泛用于存储和传输数据的格式&#xff0c;因其具有良好的可读性和可扩展性&#xff0c;在许多领域都有应用。 实现思路&#xff1a; 词法分析 词法分析的目的是将输入的 XML 字符串分解为一个个的词法单元&#xff0c;例如…...

神经符号混合与跨模态对齐:Manus AI如何重构多语言手写识别的技术边界

在全球化数字浪潮下,手写识别技术长期面临"巴别塔困境"——人类书写系统的多样性(从中文象形文字到阿拉伯语连写体)与个体书写风格的随机性,构成了人工智能难以逾越的双重壁垒。传统OCR技术在处理多语言手写场景时,准确率往往不足70%,特别是在医疗处方、古代文…...

TestBrain开源程序是一款集使用AI(如deepseek)大模型自动生成测试用例、和测试用例评审、RAG知识库管理的web平台系统

一、软件介绍 文末提供程序和源码下载 TestBrain开源程序是一款集使用AI(如deepseek)大模型自动生成测试用例、和测试用例评审、RAG知识库管理的web平台系统一个基于LLM的智能测试用例生成平台(功能慢慢丰富中&#xff0c;未来可能将测试相关的所有活动集成到一起)&#xff0c…...

软件工程效率优化:一个分层解耦与熵减驱动的系统框架

软件工程效率优化&#xff1a;一个分层解耦与熵减驱动的系统框架** 摘要 (Abstract) 本报告构建了一个全面、深入、分层的软件工程效率优化框架&#xff0c;旨在超越简单的技术罗列&#xff0c;从根本的价值驱动和熵减原理出发&#xff0c;系统性地探讨提升效率的策略与实践。…...

【金仓数据库征文】- 深耕国产数据库优化,筑牢用户体验新高度

目录 引言 一、性能优化&#xff1a;突破数据处理极限&#xff0c;提升运行效率 1.1 智能查询优化器&#xff1a;精准优化数据检索路径 1.2 并行处理技术&#xff1a;充分释放多核计算潜力 1.3 智能缓存机制&#xff1a;加速数据访问速度 二、稳定性提升&#xff1a;筑牢…...

前端面试常见部分问题,及高阶部分问题

面试中也极有可能让你徒手写代码,无聊的面试问题o( ̄︶ ̄)o 一、HTML/CSS 基础与进阶 常见问题 什么是语义化标签?有哪些常用语义化标签? 答案:语义化标签是指具有明确含义的 HTML 标签,如 <header>、<footer>、<article>、<section> 等。它们有…...

使用 AutoGen 与 Elasticsearch

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何使用 AutoGen 为你的 agent 创建一个 Elasticsearch 工具。 Elasticsearch 拥有与行业领先的生成式 AI 工具和提供商的原生集成。查看我们的网络研讨会&#xff0c;了解如何超越 RAG 基础&#xff0c;或使用 Elastic 向量…...

kafka与flume的整合、spark-streaming

kafka与flume的整合 前期配置完毕&#xff0c;开启集群 需求1&#xff1a; 利用flume监控某目录中新生成的文件&#xff0c;将监控到的变更数据发送给kafka&#xff0c;kafka将收到的数据打印到控制台&#xff08;三个node01中运行&#xff09; 1.在kafka中建立topic kafka…...

高级电影感户外街拍人像摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 高级电影感户外街拍人像摄影后期 Lr 调色&#xff0c;是运用 Adobe Lightroom 软件&#xff0c;对户外街拍的人像照片进行后期处理&#xff0c;以塑造出具有电影质感的独特视觉效果。此调色过程借助 Lr 丰富的工具与功能&#xff0c;从色彩、光影、对比度等多维度着手…...