python 实现上位机加密; 1、打开上位机时判断本地是否存在注册文件; 2、若不存在注册文件,则获取C盘序列号和当前日期,组合加密生成明码; 3、将明码解密,将明码中的日期增加30天获得一个停止日期,将停止日期+明码解密出来的C盘序列号+自定义的字符串加密生成密码; 3、上位机输入密码后,根据密码生成一个注册码放在本地生成的一个txt文件; 4、上位机每次打开与注册文件内的注册码进行比较:解密注册文件中的注册码,判断其中的C盘序列号是否与当前的C盘序列号一致,若一致,则判断当前日期是否已超过停止日期,若未超过则可正常打开上位机;
时间: 2024-04-01 17:38:45 浏览: 93
使用python对信息进行加密和解密
这个问题涉及到了加密解密、文件操作、系统信息获取等多方面的知识。我来简单介绍一下实现的思路:
1. 判断本地是否存在注册文件
可以使用 Python 的 os 模块检查文件是否存在:
```python
import os
if os.path.exists('register.txt'):
# 注册文件存在
else:
# 注册文件不存在,需要生成注册码
```
2. 生成明码
可以使用 Python 内置的 hashlib 模块对 C 盘序列号和当前日期进行哈希加密,生成一个明码:
```python
import hashlib
import datetime
import platform
def get_serial_number():
if platform.system() == 'Windows':
return os.popen('vol C:').read().strip().split()[-1]
elif platform.system() == 'Linux':
return os.popen('blkid -o value -s UUID /dev/sda1').read().strip()
else:
return None
def generate_plain_text():
serial_number = get_serial_number()
date_str = datetime.datetime.now().strftime('%Y-%m-%d')
plain_text = f'{serial_number}-{date_str}'
return plain_text
def generate_hash():
plain_text = generate_plain_text()
hash_obj = hashlib.md5()
hash_obj.update(plain_text.encode())
return hash_obj.hexdigest()
```
3. 生成密码
将生成的明码进行解密,将日期增加 30 天获得一个停止日期,将停止日期、C 盘序列号和自定义字符串组合起来进行加密生成密码:
```python
def generate_password():
hash_str = generate_hash()
stop_date = (datetime.datetime.now() + datetime.timedelta(days=30)).strftime('%Y-%m-%d')
password_plain_text = f'{stop_date}-{get_serial_number()}-my_secret_key'
password_hash_obj = hashlib.md5()
password_hash_obj.update(password_plain_text.encode())
password_hash = password_hash_obj.hexdigest()
return password_hash
```
4. 生成注册文件
将生成的密码写入注册文件:
```python
def generate_register_file():
password_hash = generate_password()
with open('register.txt', 'w') as f:
f.write(password_hash)
```
5. 检查注册文件
每次打开上位机时,先检查注册文件是否存在,如果存在则读取其中的密码进行比较:
```python
def check_register_file():
if not os.path.exists('register.txt'):
return False
with open('register.txt', 'r') as f:
password_hash = f.read().strip()
return password_hash == generate_password()
```
这样就可以实现一个简单的上位机加密功能了。当然,这只是一个简单的示例,实际应用中还需要考虑更多的安全性和可靠性问题。
阅读全文