sklearn实战-乳腺癌细胞数据挖掘

https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

一、前言:
目的:完成已有python图像处理工具的注册功能
功能:用户运行程序后,通过文件自动检测认证状态,如果未经认证,就需要注册。注册过程是用户将程序运行后显示的机器码(C盘的卷序号)发回给管理员,管理员对机器码加密后生成加密文件或字符串返回给用户。每次启动程序,在有注册文件的情况下,程序就会通过DES和base64解码,并与此刻获取到的C盘卷序列号比对,如果一致则运行主程序。如果注册文件解码后与卷序号不一致,就要提醒用户输入注册码,如果对新输入的解码后和重新获取的机器码一致,则通过认证,生成新的注册文件后进入主程序。
库和组件:
1、pyDes用于加密解密
2、base64,用于pyDes加密解密后的二次加密解密
3、win32api,用于获取C盘卷序列号
4、pyinstaller,打包
参考:
1、pyDes库 实现python的des加密
http://www.mamicode.com/info-detail-508384.html
http://twhiteman.netfirms.com/des.html
2、win32api.GetVolumeInformation
http://timgolden.me.uk/pywin32-docs/win32api__GetVolumeInformation_meth.html
3、pyinstaller打包文件说明
http://pythonhosted.org/PyInstaller/spec-files.html#using-spec-files
二、实现
#coding:utf8
#register.py
#功能说明:用户运行程序后,自动检测认证状态,如果未经认证,就需要注册。注册过程是用户将程序运行后显示的机器码(卷序号)发回给管理员,管理员通过加密后生成加密文件或字符串给回用户。 #每次登录,在有注册文件或者注册码的情况下,软件就会通过DES和base64解码,如果解码后和重新获取的机器码一致,则通过认证,进入主程序。 import base64 import win32api from pyDes import * #from binascii import a2b_hex #如果需要用二进制编码保存注册码和注册文件可以使用binascii转换 class register: def __init__(self): self.Des_Key = "BHC#@*UM" # Key self.Des_IV = "\x22\x33\x35\x81\xBC\x38\x5A\xE7" # 自定IV向量 #获取C盘卷序列号 #使用C盘卷序列号的优点是长度短,方便操作,比如1513085707,但是对C盘进行格式化或重装电脑等操作会影响C盘卷序列号。 #win32api.GetVolumeInformation(Volume Name, Volume Serial Number, Maximum Component Length of a file name, Sys Flags, File System Name) #return('', 1513085707, 255, 65470719, 'NTFS'),volume serial number is 1513085707. def getCVolumeSerialNumber(self): CVolumeSerialNumber=win32api.GetVolumeInformation("C:\\")[1] #print chardet.detect(str(CVolumeSerialNumber)) #print CVolumeSerialNumber if CVolumeSerialNumber: return str(CVolumeSerialNumber) #number is long type,has to be changed to str for comparing to content after. else: return 0 #使用DES加base64的形式加密 #考虑过使用M2Crypto和rsa,但是都因为在windows环境中糟糕的安装配置过程而放弃 def DesEncrypt(self,str): k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5) EncryptStr = k.encrypt(str) #EncryptStr = binascii.unhexlify(k.encrypt(str)) return base64.b64encode(EncryptStr) #转base64编码返回 #des解码 def DesDecrypt(self,str): k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5) DecryptStr = k.decrypt(str) #DecryptStr = a2b_hex(k.decrypt(str)) print DecryptStr return DecryptStr #获取注册码,验证成功后生成注册文件 def regist(self): key = raw_input('please input your register code: ') #由于输入类似“12”这种不符合base64规则的字符串会引起异常,所以需要增加输入判断 #while key if key: content = self.getCVolumeSerialNumber() //number has been changed to str type after use str() #print chardet.detect(content) #print type(content) #print content #type(key_decrypted) is str key_decrypted=str(self.DesDecrypt(base64.b64decode(key))) #print chardet.detect(key_decrypted) #print key_decrypted #type(key_decrypted) is str if content!=0 and key_decrypted!=0: if content != key_decrypted: print "wrong register code, please check and input your register code again:" self.regist() elif content==key_decrypted: print "register succeed." #读写文件要加判断 with open('./register','w') as f: f.write(key) f.close() return True else: return False else: return False else: self.regist() return False def checkAuthored(self): content=self.getCVolumeSerialNumber() checkAuthoredResult = 0 #读写文件要加判断 try: f=open('./register','r') if f: key=f.read() if key: key_decrypted=self.DesDecrypt(base64.b64decode(key)) if key_decrypted: if key_decrypted == content: checkAuthoredResult = 1 else: checkAuthoredResult = -1 else: checkAuthoredResult = -2 else: checkAuthoredResult = -3 else: self.regist() except IOError: print IOError print checkAuthoredResult return checkAuthoredResult if __name__ == '__main__': reg=register() reg.regist()

三、备注
1、使用C盘卷序列号而不是硬盘号的原因是:位数短,方便操作。
但是使用硬盘号才是更安全的做法,因为硬盘号不会因重装系统、格式化C盘或修改C盘序号而改变。
#CVolumeSerialNumber: 1513085707
#after encryption: ro5RVXZoP0KmnogYDeepUg==
#the HardDiskNumber: 32535332584e4741343536393237204620202020
#after encryption: MzI1MzUzMzI1ODRlNDc0MTM0MzUzNjM5MzIzNzIwNDYyMDIwMjAyMA==
2、除了win32api,wmi也可以用来获取系统信息(比如硬盘号),获取完整硬盘号的过程如下:
#虽然使用wmi可以获取磁盘序列号,可是磁盘序列号是3253533258**************3237204620202020,加密后太长,不方便操作,所以弃置
import wmi
def getHardDiskNumber(self):c = wmi.WMI()for physical_disk in c.Win32_DiskDrive(): return physical_disk.SerialNumber

https://pypi.python.org/pypi/WMI/

3、chardet可以用来检验字符串的编码类型,可以用在检测字符串相等上
chardet.detect(str)
4、还存在一些逻辑上的漏洞,比如读写文件时对文件是否存在的判断,读取方式的选择等
5、register.py,供main函数或其他需要获取认证状态的函数调用。
main函数中使用register类的过程是:
创建logIn函数用于获取认证结果-》如果认证结果为假则重新调用register类的regist函数,提醒用户输入注册码,只有成功输入了注册码才能创建新的注册文件-》如果认证结果为真则直接启动主程序。
6、管理员还应该有一个encryption.py,用于使用des+base64算法对用户发过来的C盘卷序列号进行加密,加密以后生成字符串或注册文件,再返还给用户,不再赘述。

转载请注明出处:

http://www.cnblogs.com/cquptzzq/

python风控评分卡建模和风控常识

https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

转载于:https://www.cnblogs.com/webRobot/p/6351454.html

python实现软件的注册功能(机器码+注册码机制)相关推荐

  1. python编程课程上课有用吗-Python培训网络课堂|Python编程软件有哪些功能?

    集成环境和代码编辑器是IT开发人员必备编程工具,集成环境可以兼容多种编程语言且包含更多功能,一般体积较大,且使用需掌握更多的高深的知识,相比之下,代码编辑器就更显简单,体积较小,一般需要具备以下功能: ...

  2. 推荐+1置顶+1(分享、讨论、实现)通用软件注册功能之建立有效的软件保护机制...

    推荐+1置顶+1(分享.讨论.实现) 通用软件注册功能之建立有效的软件保护机制 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制的限时使用版,在试用期内使用者可以无限制的使用软件的全部功能( ...

  3. 推荐+1置顶+1(分享、讨论、实现) 通用软件注册功能之建立有效的软件保护机制

    推荐+1置顶+1(分享.讨论.实现) 通用软件注册功能之建立有效的软件保护机制 众所周知,一些共享软件往往提供给使用者的是一个功能不受限制的限时使用版,在试用期内使用者可以无限制的使用软件的全部功能( ...

  4. 监控软件自动发现功能和监控软件分布式监控配置

    监控软件自动发现功能 新添加了一台web02主机 被监控主机上,需要安装好zabbix-agent程序 编辑zabbix-agent配置文件 [root@web02 yum.repos.d]# gre ...

  5. 入门--什么是机器码、注册机和注册码

    这篇文章我们主要讲解什么是机器码.注册机和注册码,在后面的的文章中我将演示具体的代码实现.我们经常见到一些商业软件会在你第一次打开时会给你提供机器码信息并要求你输入注册码,这时你就需要向软件的开发商提 ...

  6. python注册登陆程序_python的简单的登陆和注册功能实现

    大致的思路 我是分别写了五个函数fileRead() 文件读取FileWrite()文件写入FileModify()文件修改Register()注册Login()登陆 来实现整个功能的,话不多说直接上 ...

  7. 用python写注册登录界面web_用Python实现web端用户登录和注册功能

    这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下 用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通 ...

  8. python123注册登录_用Python实现web端用户登录和注册功能的教程

    用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通过API把用户注册这个功能实现了: _RE_MD5 = re.compile(r'^[0-9 ...

  9. python实现注册功能_python注册、登录,python注册登录,#1、实现注册功能#

    python注册.登录,python注册登录,#1.实现注册功能##1.实现注册功能 #输入:username.passowrd,cpassowrd #最多可以输错3次 #3个都不能为空 #用户名长度 ...

最新文章

  1. [JAVAEE] Thymeleaf 基本语法: 迭代循环
  2. asp版新闻发布今日弄好
  3. scp构造端口_指定端口号的scp
  4. 最全MySQL面试60题和答案
  5. jboss修改服务器端口,改了默认端口的jboss不能用shutdown.sh关闭,怎样解决
  6. 谷歌Apps vs.微软Office
  7. spring cloud 学习(5) - config server
  8. 多字节常量char m='\abcd'
  9. python输出特征相关矩阵_两个特征矩阵的有效成对相关
  10. 如何判断视频数据是H264编码
  11. ext2文件系统之ext2_lookup函数源代码分析
  12. Abaqus 用户子程序 UEL
  13. 云课堂智慧php函数测验,云课堂智慧职教答案查询
  14. 搜狗输入法android德语,教你用搜狗输入法打出法语字符
  15. Oracle | awr报告分析
  16. python 爬取图片、没有后缀名_python爬虫,图片是无格式的
  17. Excel查询两列数字的重复值
  18. 君莫笑系列视频学习(1)
  19. 马云:阿里巴巴的最高机密是我们的组织架构图
  20. EasyExcel初了解

热门文章

  1. init tarray 太大_[NOIP 2001提高组T4]Car的旅行路线
  2. 视网膜脱离oct报告图_刚刚,爱尔眼科发布关于艾芬医生诊疗过程的核查报告
  3. mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace
  4. java不要在常量和变量中出现易混淆的字母
  5. 14. 最长公共前缀
  6. 淘宝代码和html区别,taobao.html
  7. strictmath_Java StrictMath log10()方法与示例
  8. 简单的登录系统(java+JFrame+Mysql)
  9. 958. 二叉树的完全性检验 golang
  10. 多路IO转接服务器 epoll