python 实现上位机加密; 1、打开上位机时判断是否存在注册文件; 2、若不存在注册文件,则将C盘序列号加当前时间组合加密生成明码; 2、客户将明码发回开发者,开发者将明码+限定的使用时间+自定义的字符串加密生成密码发给客户; 3、客户输入密码后,上位机根据密码,自动生成一个注册码放在本地生成的一个txt文件;注册文件包含加密后的C盘序列号、时限、自定义的字符串; 4、上位机每次打开与注册文件进行校对,解密注册文件中的注册码,判断其中的C盘序列号是否与本机的C盘序列号一致,若一致,则判断其中的时限是否到期,若未到期则可正常打开上位机:
时间: 2024-04-02 18:32:15 浏览: 71
好的,您的问题是如何使用 Python 实现上位机加密,我会尽力回答。首先,您需要用到一些 Python 加密库,比如 hashlib 和 cryptography。以下是实现步骤:
1. 判断注册文件是否存在,如果不存在则获取 C 盘序列号和当前时间,将它们组合加密生成明码。
```python
import hashlib
import datetime
import os
def get_serial_number():
return os.popen('wmic diskdrive get serialnumber').read().split()[-1]
def encrypt(message):
return hashlib.sha256(message.encode()).hexdigest()
def generate_activation_code():
serial_number = get_serial_number()
current_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
plain_text = f'{serial_number}{current_time}'
activation_code = encrypt(plain_text)
return activation_code
```
2. 将明码发送给客户,客户将明码加上限定的使用时间和自定义的字符串加密生成密码,发送给开发者。
```python
from cryptography.fernet import Fernet
def generate_password(activation_code, expiration_date, custom_string):
key = Fernet.generate_key()
cipher_suite = Fernet(key)
plain_text = f'{activation_code}{expiration_date}{custom_string}'.encode()
password = cipher_suite.encrypt(plain_text)
return password, key
```
3. 客户输入密码后,上位机生成注册文件,其中包含加密后的 C 盘序列号、时限和自定义的字符串。
```python
import json
def generate_registration_file(serial_number, expiration_date, custom_string, key):
registration_info = {
'serial_number': encrypt(serial_number),
'expiration_date': encrypt(expiration_date),
'custom_string': encrypt(custom_string)
}
with open('registration_file.txt', 'w') as f:
f.write(json.dumps(registration_info))
with open('key.key', 'wb') as f:
f.write(key)
```
4. 上位机每次打开与注册文件进行校对,解密注册文件中的注册码,判断其中的 C 盘序列号是否与本机的 C 盘序列号一致,若一致,则判断其中的时限是否到期,若未到期则可正常打开上位机。
```python
def check_registration():
try:
with open('registration_file.txt', 'r') as f:
registration_info = json.load(f)
with open('key.key', 'rb') as f:
key = f.read()
serial_number = registration_info['serial_number']
expiration_date = registration_info['expiration_date']
custom_string = registration_info['custom_string']
cipher_suite = Fernet(key)
plain_text = cipher_suite.decrypt(serial_number).decode()
if plain_text != get_serial_number():
return False
plain_text = cipher_suite.decrypt(expiration_date).decode()
expiration_datetime = datetime.datetime.strptime(plain_text, '%Y%m%d%H%M%S')
if datetime.datetime.now() > expiration_datetime:
return False
return True
except:
return False
```
以上是一个简单的实现,您可以根据需要进行修改和完善。
阅读全文