Python教你app如何限时试用

一、进入w10的cmd(黑窗口)

  1. 输入命令并得到私钥和公钥
	ssh-keygen -t rsa
  1. 输入命令后一路回车可得默认秘钥存储位置和秘钥名(id_rsa),当然你也可以在第一次回车后更改存储位置和秘钥文件名。

Python教你app如何限时试用

  1. 找到并记录秘钥存放地址
    出现上图所示则表示公钥和私钥已经生成成功,在该图中你能看到它们所存储的位置。笔者的存放位置为:C:\Users\hello.ssh,附截图如下。
    Python教你app如何限时试用

二、进入Python环境,如VScode

  1. 安装PyCryptodome库
pip3 install pyCryptodome
  1. 加密文件编写
    补充说明:在下方代码的秘钥地址处,读者应自行修改对应的秘钥文件名,如果是按照步骤下来的,则只需要将下方代码’C:/Users/hello/sign’中的sign更改成 id_rsa,此时代码可直接使用。
from email import message
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
import base64
from Crypto.Signature import PKCS1_v1_5


def encode():
    """加密并打印密码"""
    sign = 'C:/Users/hello/sign' # 私钥的存储地址
    pub = 'C:/Users/hello/sign.pub' # 公钥的存储地址
    with open(sign) as f:
        private = f.read()
    with open(pub) as f:
        public = f.read()
    private_key = RSA.import_key(private)
    public_key = RSA.import_key(public)

    digest = SHA256.new()
    message = 'deadline: 2022-03-01' # 这里可以修改截止时间
    digest.update(message.encode())

    signer = PKCS1_v1_5.new(private_key)
    code = signer.sign(digest)
    signature = base64.b64encode(code)
    print(signature.decode())


encode()
  1. 解密文件的编写
from email import message
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
import base64
from Crypto.Signature import PKCS1_v1_5
import json

def decode():
    """验证秘钥并返回一个布尔值"""
    pub = 'C:/Users/hello/sign.pub' # 给出公钥
    with open(pub) as f:
        public = f.read()
    public_key = RSA.import_key(public)
    message = 'deadline: 2022-03-01'
    digest = SHA256.new()
    digest.update(message.encode())
    reader = PKCS1_v1_5.new(public_key)
    verify = reader.verify(digest,  base64.b64decode(Signature.encode()))
    return verify


def permission():
    """秘钥正确与否提示"""
    if decode():
        print("OK")
    else:
        print('试用期已过,请联系管理员!') 


"""如果用户已经填写过注册码,则无需再次输入;
   若是新用户,则需要提交一次正确的验证码"""
try:
    with open('keyname.json') as f:
        Signature = json.load(f)        
except FileNotFoundError:
    Signature = input('请输入注册码\n')
    with open('keyname.json', 'w') as f:
        json.dump(Signature, f)
    permission()
else:
    permission()    

三、结语

至此,加密和解密文件都已编写成功,在解密文件中添加了一个功能。该文件将自动识别用户是否是首次试用软件。如果是,则会要求用户输入一次注册码,之后软件就自动识别,直到过期;若不是,则直接进入。
补充

  1. 本文的秘钥部分参照了前辈的文章,在此表示由衷的感谢
  2. 第一次输入注册码时不能输错,否则软件默认你没有取得试用权限,下一步将向防止某些用户获得了试用权限,但是误操作导致即使拥有正确的注册码也不能顺利的进入软件。
上一篇:一分钟学Python|Python的循环语句


下一篇:Ubuntu测试Aethercas:通过Miracast连接WiFi屏幕