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,一经查实,立即删除!

相关文章

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 的核心功能包括多…

分类预测 | 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;这样就…

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

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

自定义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…

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

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

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

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

如何自己录制教学视频?零基础也能上手

随着在线教育的蓬勃发展&#xff0c;录制教学视频成为了教师和教育工作者们不可或缺的一项技能。无论是为了远程教学、课程分享还是知识普及&#xff0c;教学视频的录制都变得愈发重要。可是如何自己录制教学视频呢&#xff1f;本文将介绍两种录制教学视频的方法&#xff0c;这…

linux绝对路径与相对路径区别简述

绝对路径与相对路径定义 绝对路径&#xff1a;相对于根路径&#xff0c;只要文件不移动位置&#xff0c;那么它的绝对路径是永恒不变的 相对路径&#xff1a;相对于当前所在目录而言&#xff0c;当前所在的目录可能会改变&#xff0c;所以相对路径不是固定的 路径&#xff…

Availability

译文&#xff1a; #ifndef __AVAILABILITY__ #define __AVAILABILITY__ /* 这些宏都是用在头文件种。它们是作用于和系统版本有关的函数声明或者函数&#xff0c;如果它们是可用的就标示它们首次有效的方法&#xff1b;或者被抛弃的函数。 MAC OS 和_IOS_ 有不同的版本号&…

uniapp小程序button按钮去掉黑色线条

文章目录 导文去除方法 导文 在uniapp的button按钮中有一个莫名其妙的黑色线条 去除方法 button::after{border: none; }该问题并不是所有的手机机型都有&#xff0c;最好添加一下&#xff0c;以防用户手机端样式有问题。 您好&#xff0c;我是肥晨。 欢迎关注我获取前端学习…

Google浏览器快捷方式固定到任务栏启动被其他网页劫持

场景复现 1、Google浏览器设置启动时继续浏览上次打开的网页 2、先浏览CSDN网站&#xff0c;然后关闭Google浏览器 3、再次打开Google浏览器时&#xff0c;除了显示我们上次浏览的CSDN网页外&#xff0c;还默认打开了百度网页 解决办法 1、在Google浏览器中新建标签页&am…

hexo 实战:(三)独立博客运营总结

前言 通过前面两个步骤&#xff0c;完成了静态博客从搭建到基本功能添加和界面优化。那么&#xff0c;这次就要介绍一下搭在 GitHub 上的静态博客如何运营推广。也就是如何让网站被各大搜索引擎收录&#xff1f;如何提高网站权重&#xff0c;提高收录量&#xff1f; 网站收录 …

神经网络 #数据挖掘 #Python

神经网络是一种受生物神经元系统启发的人工计算模型&#xff0c;用于模仿人脑的学习和决策过程。它由大量互相连接的节点&#xff08;称为神经元&#xff09;组成&#xff0c;这些节点处理和传递信息。神经网络通常包含输入层、隐藏层&#xff08;可有多个&#xff09;和输出层…

2024版 空间杜宾模型和检验代码+结果解释

空间误差、空间滞后、空间杜宾模型&#xff0c;筛选过程 莫兰指数&#xff0c;LM检验&#xff0c;LR检验&#xff0c;WALD检验&#xff0c;代码&#xff0c;及解释用法 空间溢出直接效应间接效应等等空间计量全过程。 原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4…

旋转机械振动信号特征提取(Python)

前缀 &#xff1a;将一维机械振动信号构造为训练集和测试集&#xff08;Python&#xff09; https://mp.weixin.qq.com/s/DTKjBo6_WAQ7bUPZEdB1TA import pandas as pd import numpy as np import scipy.io as sio import statistics_hamming from statistics_hamming import…

掌握这些 Windows 截图工具:猫头虎带你解析 ShareX、PicPick、FastStone 和 Snagit

掌握这些 Windows 截图工具&#xff1a;猫头虎带你解析 ShareX、PicPick、FastStone 和 Snagit 前言 在日常办公、学习和内容创作中&#xff0c;截图是我们经常需要用到的功能。然而&#xff0c;面对各种不同的截图需求&#xff0c;如全屏截图、区域截图、滚动截图等&#xf…