python项目加密和增加时间许可证

在这里插入图片描述

1.bat,执行如下的命令,第一句是更新或增加许可证
第二句是加密draw_face.py

python offer.py
pyarmor obfuscate -O dist draw_face.py

绘制自制人脸.py,调用加密的代码draw_face代码

import sys
import os
import cv2# 添加加密模块所在的路径
sys.path.append('C:\\Users\\67099\PycharmProjects\pythonProject1\dist')try:import draw_face  # 导入加密后的模块
except ImportError:print("Failed to import draw_face module.")sys.exit(1)# 示例代码调用
image_path = "C:\\Demos\\face_detection1\\imghand\\frame_80.jpg"
input_str = """290 206 119 154 318.0 254.0 1 372.0 255.0 1 341.0 288.0 1 323.0 317.0 1 371.0 317.0 1 0.8"""resized_image = draw_face.process_image(image_path, input_str)
if resized_image is not None:# 显示缩小后的图像cv2.imshow("Bounding Box and Key Points", resized_image)cv2.waitKey(0)
else:cv2.destroyAllWindows()print("Failed to process the image.")

offer.py,新增许可证

#!/usr/bin/env python3
from Crypto.Cipher import AES
from binascii import b2a_hex# 定义加密函数
def encrypt(content):# 校验密钥是否为16或16的倍数while len(content) % 16:content += ' '# 把密钥编码为utf-8content = content.encode('utf-8')# cwillchris123321为加密密钥(必须16位)aes = AES.new(b'cwillchris123321', AES.MODE_CBC, b'cwillchris123321')# 对密钥进行aes加密encrypted_content = aes.encrypt(content)# 返回二进制数据的十六进制表示return b2a_hex(encrypted_content)# 生成许可证文件
def gen_license_file(username, expiry_date):license_file = './License.dat'# 设置用户名和脚本使用的有效期with open(license_file, 'w') as LF:# 写入用户名LF.write(f'Username : {username}\n')# 写入有效期LF.write(f'Date : {expiry_date}\n')# 生成签名,防止篡改sign = encrypt(f'{username}#{expiry_date}')# 将生成的签名进行utf-8编码后写入许可证文件LF.write(f'Sign : {sign.decode("utf-8")}\n')if __name__ == '__main__':# 示例调用,生成许可证文件gen_license_file('example_user', '20240624')

在这里插入图片描述
draw_face.py,要加密的程序,注意要加密的程序上面增加下面这段话

from Crypto.Cipher import AES
from binascii import a2b_hex
import datetimedef decrypt(encrypted_content):encrypted_content = a2b_hex(encrypted_content)aes = AES.new(b'cwillchris123321', AES.MODE_CBC, b'cwillchris123321')decrypted_content = aes.decrypt(encrypted_content)return decrypted_content.decode('utf-8').strip()def verify_license_file():license_file = './License.dat'try:with open(license_file, 'r') as LF:lines = LF.readlines()username = lines[0].split(' : ')[1].strip()date = lines[1].split(' : ')[1].strip()sign = lines[2].split(' : ')[1].strip()expected_sign = decrypt(sign)if expected_sign == f'{username}#{date}':current_date = datetime.datetime.now().strftime('%Y%m%d')if current_date <= date:return Trueelse:print('License has expired.')else:print('License is invalid.')except Exception as e:print(f'Error verifying license: {e}')return Falseif not verify_license_file():raise SystemExit('Invalid or expired license. Please contact support.')

完整的代码如下所示

from Crypto.Cipher import AES
from binascii import a2b_hex
import datetimedef decrypt(encrypted_content):encrypted_content = a2b_hex(encrypted_content)aes = AES.new(b'cwillchris123321', AES.MODE_CBC, b'cwillchris123321')decrypted_content = aes.decrypt(encrypted_content)return decrypted_content.decode('utf-8').strip()def verify_license_file():license_file = './License.dat'try:with open(license_file, 'r') as LF:lines = LF.readlines()username = lines[0].split(' : ')[1].strip()date = lines[1].split(' : ')[1].strip()sign = lines[2].split(' : ')[1].strip()expected_sign = decrypt(sign)if expected_sign == f'{username}#{date}':current_date = datetime.datetime.now().strftime('%Y%m%d')if current_date <= date:return Trueelse:print('License has expired.')else:print('License is invalid.')except Exception as e:print(f'Error verifying license: {e}')return Falseif not verify_license_file():raise SystemExit('Invalid or expired license. Please contact support.')import cv2
import numpy as npdef process_image(image_path, input_str):# 读取图像image = cv2.imread(image_path)# 检查图像是否成功加载if image is None:print(f"Error: Unable to load image from {image_path}")return None# 将输入字符串按行分割lines = input_str.strip().split('\n')# 遍历每行for line in lines:# 将每行按空格分割,获取所有数字values = line.split()# 提取前4个数字,代表框的范围box = [int(values[i]) for i in range(4)]# 将浮点数列表分组成(x, y)坐标对,每组保留第1、2个数字,去掉第3个数字,直到第19个数字keypoints = [(float(values[i]), float(values[i + 1]), float(values[i + 2])) for i in range(4, 19, 3)]# 将坐标转换为整数keypoints = np.array(keypoints, dtype=np.int32)# 遍历关键点,使用不同颜色进行标记for point in keypoints:if point[2] == 1.0:cv2.circle(image, (point[0], point[1]), 5, (0, 0, 255), -1)  # 红色else:cv2.circle(image, (point[0], point[1]), 5, (0, 255, 0), -1)  # 绿色# 在图像上绘制边界框cv2.rectangle(image, (box[0], box[1]), (box[0] + box[2], box[1] + box[3]), (0, 0, 255), 2)# 等比例缩小图像scale_factor = 0.5  # 缩小50%width = int(image.shape[1] * scale_factor)height = int(image.shape[0] * scale_factor)dim = (width, height)resized_image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)return resized_image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬虫笔记16——异步爬取二手汽车数据去重存入MySQL

需要用到的库 #异步数据库 pip install aiomysql #reids数据库进行去重 pip install redis #用hashlib进行md5加密 pip install hashlib #基于异步IO的网络请求库 pip install aiohttp #xpath获取静态页面数据 pip install lxml目标网站 目标网站&#xff1a;https://www.che…

高考专业组 07组 08组 武汉大学

武汉大学的招生都什么废物点心&#xff0c;搜个专业组都没官方解释&#xff01; 07组&#xff1a;理学&#xff0c;详见下表专业代码07xxxx&#xff0c;例如数学、物理、化学 08组&#xff1a;工学&#xff0c;详见下表专业代码08xxxx&#xff0c;例如机械、电子信息、自动化、…

每天一个数据分析题(三百七十八)- 系统聚类

在系统聚类方法中&#xff0c;哪种系统聚类是直接利用了组内的离差平方和&#xff1f; A. 最长距离法 B. 重心法 C. Ward法 D. 类平均法 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#…

R语言做图

目录 1. 图形参数 2. 低级图形 3. 部分高级图形 参考 1. 图形参数 图形参数用于设置图形中各种属性。 有些参数直接用在绘图函数内&#xff0c;如plot函数可以用 pch&#xff08;点样式&#xff09;、col&#xff08;颜色&#xff09;、cex&#xff08;文字符号大小倍数&…

ONLYOFFICE 桌面编辑器 8.1

ONLYOFFICE 简介 ONLYOFFICE 是一个开源的办公套件&#xff0c;它提供了在线文档编辑器、表格编辑器和演示文稿编辑器&#xff0c;这些编辑器能够兼容 Microsoft Office 格式&#xff08;.docx, .xlsx, .pptx&#xff09;以及其他流行的标准格式。ONLYOFFICE 的核心功能包括多…

Spcok测试代码抛异常场景

测试代码抛异常场景 ‍ class ExceptionSpec extends Specification {def validateService new ValidateService()Unrolldef "验证UserInfo"() {when: "调用校验方法"validateService.validateUser(user)then: "捕获异常并设置需要验证的异常值&qu…

注意力机制的原理

注意力机制的原理 注意力机制是深度学习中的一种关键组件&#xff0c;尤其是在处理序列数据&#xff0c;如自然语言处理任务时&#xff0c;它允许模型关注输入序列的不同部分&#xff0c;而不是对所有元素赋予相同的权重。其基本思想是为每个输入位置赋予一个权重&#xff0c;…

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融…

《2024天猫618大促-首波男装销售报告》

这份报告主要分析了2024年天猫618大促期间的首波男装销售情况,从多个维度进行了深入的复盘和分析。报告中不仅包含了销售数据的统计分析,还对消费者行为、品牌表现、产品趋势等方面进行了详细的解读。通过对这些数据和信息的深入挖掘,报告揭示了当前男装市场的一些重要趋势和特…

qt经典界面框架

目的 其实就是一个简单的界面显示&#xff0c;是很常用的形式。 说起来简单也是简单&#xff0c;但当初&#xff0c;刚开始做时&#xff0c;感觉非常的复杂&#xff0c;不知如何下手。 现在感觉简单多了。 这个框架利用了QT的现成的MainWindow与QDockWidget&#xff0c;这样就…

Vue3 + TS 防抖动

目录 一、防抖动 1、概念 2、原理 3、应用场景 1、概念 通过将多次连续触发的函数调用合并成一次来减少函数的执行次数。防抖的核心思想是在某个时间段内&#xff0c;只执行一次函数&#xff0c;而忽略在此时间段内的其他触发。 2、原理 (1)、定时器&#xff1b; (2)、重…

java基于ssm+jsp 人才公寓管理系统

1管理员功能模块 管理员登录&#xff0c;通过填写用户名、密码进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入人才公寓管理系统可以查看个人中心、住户管理、小区公告管理、停车位管理、安保人员管理、安保值班管理、房屋信息管理、外来登记管理、物品…

把STL容器放入共享内存,重用STL allocator,传入模板参数Allocator,可以实现

问题 Q: 如何用共享内存来存放C STL中中的容器&#xff1f; A: 传入自定义的申请共享内存上空间的allocator&#xff0c;见模板参数Allocator 参考 https://www.zhihu.com/question/319108981/answer/649050789 https://en.cppreference.com/w/cpp/container/vector http://…

自定义User-Agent:使用Python Requests进行网络请求

在网络编程和数据采集领域&#xff0c;HTTP请求是与服务器交互的基本方式。User-Agent&#xff08;用户代理&#xff09;是HTTP请求中的一个重要字段&#xff0c;它告诉服务器发起请求的客户端类型和版本信息。在某些情况下&#xff0c;自定义User-Agent可以帮助我们模拟不同的…

CodeIgniter学习笔记 Item6--CI中的常规主题_ci中parent __construct();

$route[default\_controller] welcome; $route[404\_override] ;更重要的功能是&#xff0c;如果我们要实现通过/index.php/news/4.html访问/index.php/article/show/1这样一个需求&#xff0c;可以在routes.php定义路由关系&#xff0c;将原始的URL转换成需要样式 $route[n…

QtSingleApplication

​​​​​​/qtsingleapplication/ qtSingleApplication使用总结-CSDN博客 示例&#xff1a; #include "mainwindow.h" #include <QApplication> #include <QMessageBox> #include "qtsingleapplication/qtsingleapplication.h" int main(…

正向代理与反向代理:深入解析与实例讲解

代理服务器是一种网络实体&#xff0c;它充当客户端与服务器之间的中介&#xff0c;负责转发请求和响应。代理服务器可以根据其使用方式和功能的不同&#xff0c;分为正向代理和反向代理。 转转的面试中问到了正向代理和反向代理。所以本篇文章将详细解析这两种代理方式&#…

产品干货 | 如何通过Power Platform快速创建自定义连接器,让开发集成更简单

引言 Introduction&#xff1a; 最近&#xff0c;微软推出了许多新产品功能。迅易科技作为微软13年来紧密的生态合作伙伴&#xff0c;为300行业头部客户实施1000项目。为此&#xff0c;我们总结了多年的项目经验且产品学习心得&#xff0c;邀请了迅易技术专家为大家持续分享微软…

Oracle数据库之PL/SQL例外(二十三)

在Oracle PL/SQL中&#xff0c;例外&#xff08;或异常&#xff09;是程序设计语言提供的一种功能&#xff0c;旨在增强程序的健壮性和容错性。Oracle PL/SQL中的例外可以分为两大类&#xff1a;系统定义例外和自定义例外。 1. 系统定义例外 系统定义例外是Oracle数据库预先定…

不同系統和流覽器如何檢查代理設置(Mac/Windows/Linux)

本文將詳細介紹如何檢查代理設置&#xff0c;並提供一些建議&#xff0c;幫助你更好地管理和優化代理使用體驗。 為什麼需要檢查代理設置&#xff1f; 代理伺服器的主要功能之一是保護用戶的隱私。如果代理設置不正確&#xff0c;可能會暴露你的真實IP地址&#xff0c;導致隱…