最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)

 更新時(shí)間:2016年10月09日 08:51:10   作者:cquptzzq  
用戶運(yùn)行程序后,通過(guò)文件自動(dòng)檢測(cè)認(rèn)證狀態(tài),如果未經(jīng)認(rèn)證,就需要注冊(cè)。這篇文章主要介紹了基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)的相關(guān)資料,需要的朋友可以參考下

一、前言:

目的:完成已有python圖像處理工具的注冊(cè)功能

功能:用戶運(yùn)行程序后,通過(guò)文件自動(dòng)檢測(cè)認(rèn)證狀態(tài),如果未經(jīng)認(rèn)證,就需要注冊(cè)。注冊(cè)過(guò)程是用戶將程序運(yùn)行后顯示的機(jī)器碼(C盤(pán)的卷序號(hào))發(fā)回給管理員,管理員對(duì)機(jī)器碼加密后生成加密文件或字符串返回給用戶。每次啟動(dòng)程序,在有注冊(cè)文件的情況下,程序就會(huì)通過(guò)DES和base64解碼,并與此刻獲取到的C盤(pán)卷序列號(hào)比對(duì),如果一致則運(yùn)行主程序。如果注冊(cè)文件解碼后與卷序號(hào)不一致,就要提醒用戶輸入注冊(cè)碼,如果對(duì)新輸入的解碼后和重新獲取的機(jī)器碼一致,則通過(guò)認(rèn)證,生成新的注冊(cè)文件后進(jìn)入主程序。

庫(kù)和組件:

1、pyDes用于加密解密

2、base64,用于pyDes加密解密后的二次加密解密

3、win32api,用于獲取C盤(pán)卷序列號(hào)

4、pyinstaller,打包

參考:

1、pyDes庫(kù) 實(shí)現(xiàn)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打包文件說(shuō)明

http://pythonhosted.org/PyInstaller/spec-files.html#using-spec-files

二、實(shí)現(xiàn)

#coding:utf8
#register.py
#功能說(shuō)明:用戶運(yùn)行程序后,自動(dòng)檢測(cè)認(rèn)證狀態(tài),如果未經(jīng)認(rèn)證,就需要注冊(cè)。注冊(cè)過(guò)程是用戶將程序運(yùn)行后顯示的機(jī)器碼(卷序號(hào))發(fā)回給管理員,管理員通過(guò)加密后生成加密文件或字符串給回用戶。
#每次登錄,在有注冊(cè)文件或者注冊(cè)碼的情況下,軟件就會(huì)通過(guò)DES和base64解碼,如果解碼后和重新獲取的機(jī)器碼一致,則通過(guò)認(rèn)證,進(jìn)入主程序。
import base64
import win32api
from pyDes import *
#from binascii import a2b_hex #如果需要用二進(jìn)制編碼保存注冊(cè)碼和注冊(cè)文件可以使用binascii轉(zhuǎn)換
class register:
def __init__(self):
self.Des_Key = "BHC#@*UM" # Key
self.Des_IV = "\x22\x33\x35\x81\xBC\x38\x5A\xE7" # 自定IV向量
#獲取C盤(pán)卷序列號(hào)
#使用C盤(pán)卷序列號(hào)的優(yōu)點(diǎn)是長(zhǎng)度短,方便操作,比如1513085707,但是對(duì)C盤(pán)進(jìn)行格式化或重裝電腦等操作會(huì)影響C盤(pán)卷序列號(hào)。
#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的形式加密
#考慮過(guò)使用M2Crypto和rsa,但是都因?yàn)樵趙indows環(huán)境中糟糕的安裝配置過(guò)程而放棄
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) #轉(zhuǎn)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
#獲取注冊(cè)碼,驗(yàn)證成功后生成注冊(cè)文件
def regist(self):
key = raw_input('please input your register code: ')
#由于輸入類(lèi)似“12”這種不符合base64規(guī)則的字符串會(huì)引起異常,所以需要增加輸入判斷
#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."
#讀寫(xiě)文件要加判斷
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
#讀寫(xiě)文件要加判斷
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盤(pán)卷序列號(hào)而不是硬盤(pán)號(hào)的原因是:位數(shù)短,方便操作。

但是使用硬盤(pán)號(hào)才是更安全的做法,因?yàn)橛脖P(pán)號(hào)不會(huì)因重裝系統(tǒng)、格式化C盤(pán)或修改C盤(pán)序號(hào)而改變。

#CVolumeSerialNumber: 1513085707
#after encryption: ro5RVXZoP0KmnogYDeepUg==
#the HardDiskNumber: 32535332584e4741343536393237204620202020
#after encryption: MzI1MzUzMzI1ODRlNDc0MTM0MzUzNjM5MzIzNzIwNDYyMDIwMjAyMA==

2、除了win32api,wmi也可以用來(lái)獲取系統(tǒng)信息(比如硬盤(pán)號(hào)),獲取完整硬盤(pán)號(hào)的過(guò)程如下:

#雖然使用wmi可以獲取磁盤(pán)序列號(hào),可是磁盤(pán)序列號(hào)是3253533258**************3237204620202020,加密后太長(zhǎng),不方便操作,所以棄置
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可以用來(lái)檢驗(yàn)字符串的編碼類(lèi)型,可以用在檢測(cè)字符串相等上

chardet.detect(str)

4、還存在一些邏輯上的漏洞,比如讀寫(xiě)文件時(shí)對(duì)文件是否存在的判斷,讀取方式的選擇等

5、register.py,供main函數(shù)或其他需要獲取認(rèn)證狀態(tài)的函數(shù)調(diào)用。

main函數(shù)中使用register類(lèi)的過(guò)程是:

創(chuàng)建logIn函數(shù)用于獲取認(rèn)證結(jié)果-》如果認(rèn)證結(jié)果為假則重新調(diào)用register類(lèi)的regist函數(shù),提醒用戶輸入注冊(cè)碼,只有成功輸入了注冊(cè)碼才能創(chuàng)建新的注冊(cè)文件-》如果認(rèn)證結(jié)果為真則直接啟動(dòng)主程序。

6、管理員還應(yīng)該有一個(gè)encryption.py,用于使用des+base64算法對(duì)用戶發(fā)過(guò)來(lái)的C盤(pán)卷序列號(hào)進(jìn)行加密,加密以后生成字符串或注冊(cè)文件,再返還給用戶,不再贅述。

以上所述是小編給大家介紹的基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 基于DataFrame篩選數(shù)據(jù)與loc的用法詳解

    基于DataFrame篩選數(shù)據(jù)與loc的用法詳解

    今天小編就為大家分享一篇基于DataFrame篩選數(shù)據(jù)與loc的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法

    NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了NumPy統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python2與Python3的區(qū)別點(diǎn)整理

    Python2與Python3的區(qū)別點(diǎn)整理

    在本篇文章里小編給大家整理的是關(guān)于Python2與Python3的區(qū)別點(diǎn)整理內(nèi)容,需要的朋友們可以參考下。
    2019-12-12
  • Python實(shí)現(xiàn)賬號(hào)密碼輸錯(cuò)三次即鎖定功能簡(jiǎn)單示例

    Python實(shí)現(xiàn)賬號(hào)密碼輸錯(cuò)三次即鎖定功能簡(jiǎn)單示例

    這篇文章主要介紹了Python實(shí)現(xiàn)賬號(hào)密碼輸錯(cuò)三次即鎖定功能,結(jié)合實(shí)例形式分析了Python文件讀取、流程控制、數(shù)據(jù)判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Python獲取網(wǎng)頁(yè)內(nèi)容的靠譜方法

    Python獲取網(wǎng)頁(yè)內(nèi)容的靠譜方法

    如果你希望使用更加安全和可靠的方式下載網(wǎng)頁(yè)內(nèi)容,并且希望避免 requests 中的 SSL 問(wèn)題,有幾個(gè)替代方案和改進(jìn)方法,可以更好地處理 SSL 驗(yàn)證、證書(shū)問(wèn)題等,本文給大家介紹了幾種Python獲取網(wǎng)頁(yè)內(nèi)容的靠譜方法,需要的朋友可以參考下
    2025-02-02
  • python數(shù)據(jù)分析之實(shí)現(xiàn)地圖數(shù)據(jù)繪制

    python數(shù)據(jù)分析之實(shí)現(xiàn)地圖數(shù)據(jù)繪制

    這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)分析中如何實(shí)現(xiàn)地圖數(shù)據(jù)繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python語(yǔ)言中with as的用法使用詳解

    python語(yǔ)言中with as的用法使用詳解

    本篇文章主要介紹了python語(yǔ)言中with as的用法使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • python如果快速判斷數(shù)字奇數(shù)偶數(shù)

    python如果快速判斷數(shù)字奇數(shù)偶數(shù)

    這篇文章主要介紹了python如果快速判斷數(shù)字奇數(shù)偶數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python實(shí)現(xiàn)將json文件中向量寫(xiě)入Excel的方法

    Python實(shí)現(xiàn)將json文件中向量寫(xiě)入Excel的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)將json文件中向量寫(xiě)入Excel的方法,涉及Python讀取、遍歷json格式數(shù)據(jù)及Excel文件寫(xiě)入相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • 快速進(jìn)修Python指南之面向?qū)ο蠡A(chǔ)

    快速進(jìn)修Python指南之面向?qū)ο蠡A(chǔ)

    這篇文章主要為大家介紹了Java開(kāi)發(fā)者快速進(jìn)修Python指南之面向?qū)ο蠡A(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論

宁都县| 本溪| 化州市| 遂宁市| 阿拉善右旗| 苗栗市| 南京市| 安泽县| 英超| 敖汉旗| 沂南县| 平塘县| 泾源县| 南丰县| 上栗县| 渭南市| 佛教| 柳河县| 拉萨市| 股票| 滦南县| 繁昌县| 齐齐哈尔市| 贵南县| 华阴市| 湖北省| 丹棱县| 互助| 佛冈县| 浦江县| 云和县| 萨嘎县| 剑河县| 玉环县| 临高县| 武强县| 汨罗市| 灌南县| 安达市| 北海市| 北川|