python系统注册密码设置,给python程序加注册码

大家好,小编来为大家解答以下问题,python系统注册密码设置,给python程序加注册码,现在让我们一起来看看吧!

原理

  1. 判断路径下是否存在识别文件,若存在就解密对比,若不存在就进入机器码注册:
  2. 获取系统C盘序列号作为识别ID,并添加随机数作为混淆,生成最终机器码。
  3. 将机器码发给软件开发者,开发者将机器码解密后,添加自己的标识符号并加密生成key,发给用户python用turtle画简单树形图
  4. 用户输入key,程序对比并保存。
  5. 用户下次打开软件时,重新开始步骤‘1’。

说明

  • 加密:将序列号经过Des加密,再经过base64编码。
  • 解密:将密码经过base64解码,再经过Des解密。
  • 写文件:将二进制字符转为十六进制保存。
  • 读文件:将十六进制转为二进制。

代码

#  coding: utf-8
'''
原理
    判断路径下是否存在识别文件,若存在就解密对比,若不存在就进入机器码注册:
    获取系统C盘序列号作为识别ID,并添加随机数作为混淆,生成最终机器码。
    将机器码发给软件开发者,开发者将机器码解密后,添加自己的标识符号并加密生成key,发给用户。
    用户输入key,程序对比并保存。
    用户下次打开软件时,重新开始步骤‘1’。
说明
    加密:将序列号经过Des加密,再经过base64编码。
    解密:将密码经过base64解码,再经过Des解密。
    写文件:将二进制字符转为十六进制保存。
    读文件:将十六进制转为二进制。
'''
#  coding: utf-8

import win32api
import pyDes
from binascii import b2a_hex, a2b_hex
import base64
import requests
import re
import os
import random
import json
import time

def DebugPrint(*args):
    print(*args)

Des_Key = "12345678"  # Key
Des_IV = "00000000"  # 自定IV向量
TYPE = 'DB'  # DB
class Register:
    def __init__(self, TYPE):
        self.TYPE = TYPE
        self.Des_Key = Des_Key
        self.Des_IV = Des_IV

    def getCVolumeSerialNumber(self):
        CVolumeSerialNumber = win32api.GetVolumeInformation("C:\\")[1]
        # print(CVolumeSerialNumber)
        if CVolumeSerialNumber:
            return str(CVolumeSerialNumber)
        else:
            return 0

    def DesEncrypt(self, str):
        k = pyDes.des(self.Des_Key, pyDes.CBC, self.Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
        encryptStr = k.encrypt(str)
        string = base64.b64encode(encryptStr)
        # print(string)
        return string  # 转base64编码返回

    def DesDecrypt(self, string):
        string = base64.b64decode(string)
        k = pyDes.des(self.Des_Key, pyDes.CBC, self.Des_IV, pad=None, padmode=pyDes.PAD_PKCS5)
        decryptStr = k.decrypt(string)
        # print(decryptStr)
        return decryptStr

    # {'Type':'DB', 'stat':'Buy/Trial/TimeTri', 'Serial':'0', 'Random':'0-1000', 'Mix':''}
    def Regist_New(self):
        if os.path.isfile('conf.bin'):
            with open('conf.bin', 'rb') as fp:
                key = a2b_hex(fp.read())
                # print(key)
            serialnumber = self.getCVolumeSerialNumber()
            decryptstr = self.DesDecrypt(key).decode('utf8')
            decryptstr = eval(decryptstr)
            # print(decryptstr)
            if serialnumber == decryptstr['Serial']:
                if self.TYPE == decryptstr['Type']:
                    if 'Buy' == decryptstr['stat']:
                        DebugPrint('>> Permanently Purchased')
                        # print(">> 验证完成")
                        return 1
                    elif 'Trial' == decryptstr['stat']:
                        DebugPrint('>> Single Trial')
                        return 2
                    elif decryptstr['stat'].startswith('TimeTri'):
                        self.CheckTimeTri()
                        DebugPrint('>> Time Limited Purchase')
                        return 3
                else:
                    DebugPrint('>> Invalid conf.bin')
        rand = str(random.randrange(1, 1000))
        serialnumber = self.getCVolumeSerialNumber()
        # print(serialnumber)
        content = str({'stat': '', 'Serial': serialnumber, 'Random': rand, 'Type': self.TYPE})
        encryptstr = self.DesEncrypt(content).decode('utf8')
        print(">> Serial Number:", encryptstr)
        while True:
            key = input(">> Verification Code:")
            try:
                decryptstr = self.DesDecrypt(key.encode('utf8')).decode('utf8')
                decryptstr = eval(decryptstr)
                # print(decryptstr)
                if serialnumber == decryptstr['Serial']:
                    if 'Buy' == decryptstr['stat']:
                        DebugPrint('>> Permanently Purchased')
                        with open('conf.bin', 'wb') as fp:
                            fp.write(b2a_hex(key.encode('utf8')))
                            DebugPrint(">> Validation Completed")
                        return 1
                    elif 'Trial' == decryptstr['stat']:
                        DebugPrint('>> Single Trial')
                        return 2
                    elif decryptstr['stat'].startswith('TimeTri'):
                        DebugPrint('>> Time Limited Purchase')
                        with open('conf.bin', 'wb') as fp:
                            fp.write(b2a_hex(key.encode('utf8')))
                            DebugPrint(">> Validation Completed")
                        return 3
                    else:
                        DebugPrint(">> Input Epy")
            except Exception as e:
                print(e)
                DebugPrint(">> Input Err")
                continue

    def Regist(self):
        if os.path.isfile('conf.bin'):
            with open('conf.bin', 'rb') as fp:
                key = a2b_hex(fp.read())
                # print(key)
            serialnumber = self.getCVolumeSerialNumber()
            decryptstr = self.DesDecrypt(key).decode('utf8')
            # print(decryptstr)
            if serialnumber in decryptstr:
                if 'Buy' in decryptstr:
                    DebugPrint('>> Permanently Purchased')
                    # print(">> 验证完成")
                    return 1
                elif 'Trial' in decryptstr:
                    DebugPrint('>> Single Trial')
                    return 2
                elif 'TimeTri' in decryptstr:
                    self.CheckTimeTri()
                    DebugPrint('>> Time Limited Purchase')
                    return 3

        rand = str(random.randrange(1, 1000))
        serialnumber = self.getCVolumeSerialNumber() + rand
        # print(serialnumber)
        encryptstr = self.DesEncrypt(serialnumber).decode('utf8')
        print(">> Serial Number:", encryptstr)
        while True:
            key = input(">> Verification Code:")
            try:
                decryptstr = self.DesDecrypt(key.encode('utf8')).decode('utf8')
                # print(decryptstr)
                if serialnumber in decryptstr:
                    if 'Buy' in decryptstr:
                        DebugPrint('>> Permanently Purchased')
                        with open('conf.bin', 'wb') as fp:
                            fp.write(b2a_hex(key.encode('utf8')))
                            DebugPrint(">> Validation Completed")
                        return 1
                    elif 'Trial' in decryptstr:
                        DebugPrint('>> Single Trial')
                        return 2
                    elif 'TimeTri' in decryptstr:
                        DebugPrint('>> Time Limited Purchase')
                        with open('conf.bin', 'wb') as fp:
                            fp.write(b2a_hex(key.encode('utf8')))
                            DebugPrint(">> Validation Completed")
                        return 3
            except Exception as e:
                print(e)
                DebugPrint(">> Input Err")
                continue

    def GetTime(self):
        url = r'http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp'
        try:
            html = requests.get(url).json()
            if 'SUCCESS' in html['ret'][0]:
                return html['data']['t']
        except:
            return time.time()

    def CheckTimeTri(self):
        with open('conf.bin', 'rb') as fp:
            key = a2b_hex(fp.read())
            # print(key)
            decryptstr = self.DesDecrypt(key).decode('utf8')
            decryptstr = eval(decryptstr)
            # print(decryptstr)
            triallTime = int(re.findall(r'\[(.*)\]', decryptstr['stat'])[0])
            # print('triallTime:', triallTime)
            # print('GetTime:', GetTime())
            if int(self.GetTime()) >= triallTime:
                DebugPrint('>> Time Expires')
                fp.close()
                os.remove('conf.bin')
                DebugPrint("\r\n\r\n>> Program End~")
                input(">> Any Key to Exit")
                os._exit(0)
            return 1



def verify():
    Reg = Register(TYPE)
    key = input('Key => ')
    decryptstr = Reg.DesDecrypt(key)
    decryptstr = eval(decryptstr)
    print(decryptstr)

    decryptstr['stat'] = 'Buy'
    res = Reg.DesEncrypt(str(decryptstr))
    print('Buy =>', res)

    decryptstr['stat'] = 'Trial'
    res = Reg.DesEncrypt(str(decryptstr))
    print('Trial =>', res)

    minute = 30
    times = int(Reg.GetTime()) + 1000 * 60 * minute
    decryptstr['stat'] = 'TimeTri[%d]' % times
    res = Reg.DesEncrypt(str(decryptstr))
    print('TimeTrial =>', res)

def encrypt():
    Reg = Register(TYPE)
    res = Reg.Regist_New()
    print(res)

if __name__ == '__main__':
    verify()
    encrypt()

效果

欢迎关注↓↓↓

  • 头条号:小锋学长

  • 微信公众号:xfxuezhang

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种强大的编程语言,可以用于创建各种应用程序,包括注册用户名和密码登录的功能。 要实现注册用户名和密码登录的功能,我们可以使用Python的内置库和函数来处理用户的输入和验证。 首先,我们可以使用input()函数来接收用户的输入。用户可以通过输入他们的用户名和密码注册。我们可以将这些信息保存在一个字典中,其中用户名作为键,密码作为值。 接下来,我们可以使用open()函数来创建一个文本文件,用于保存用户名和密码。我们可以使用with关键字来确保文件在使用后被正确关闭。然后,使用文件的write()方法来将用户名和密码写入文件中。 当用户尝试登录时,我们可以使用input()函数来接收他们输入的用户名和密码。我们可以使用open()函数来打开之前创建的文件,然后使用文件的readlines()方法来读取文件中的内容。 我们可以使用一个循环来逐行检查文件中的用户名和密码,以验证用户输入是否正确。如果找到匹配的用户名和密码,我们可以输出登录成功的信息,并终止循环。如果没有找到匹配的用户名和密码,我们可以提示用户重新输入。 总之,使用Python编写注册用户名和密码登录功能并不复杂。通过合理利用Python的内置库和函数,我们可以方便地实现这一功能。不仅如此,Python还有许多其他强大的功能和库,可以帮助我们创建各种复杂的应用程序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值