1. 程式人生 > 程式設計 >Python Des加密解密如何實現軟體註冊碼機器碼

Python Des加密解密如何實現軟體註冊碼機器碼

這篇文章主要介紹了Python Des加密解密如何實現軟體註冊碼機器碼,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

原理

  • 判斷路徑下是否存在識別檔案,若存在就解密對比,若不存在就進入機器碼註冊:
  • 獲取系統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 os
def getCVolumeSerialNumber():
  CVolumeSerialNumber=win32api.GetVolumeInformation("C:\\")[1]
  # print(CVolumeSerialNumber)
  if CVolumeSerialNumber:
    return str(CVolumeSerialNumber)
  else:
    return 0
 
def DesEncrypt(str):
  k = pyDes.des(Des_Key,pyDes.CBC,Des_IV,pad=None,padmode=pyDes.PAD_PKCS5)
  encryptStr = k.encrypt(str)
  string = base64.b64encode(encryptStr)
  # print(string)
  return string # 轉base64編碼返回
 
def DesDecrypt(string):
  string = base64.b64decode(string)
  k = pyDes.des(Des_Key,padmode=pyDes.PAD_PKCS5)
  decryptStr = k.decrypt(string)
  # print(decryptStr)
  return decryptStr
 
Des_Key = "12345678" # Key
Des_IV = "12345678" # 自定IV向量
def Register():
  if os.path.isfile('conf.bin'):
    with open('conf.bin','rb') as fp:
      key = a2b_hex(fp.read())
      print(key)
    serialnumber = getCVolumeSerialNumber()
    decryptstr = DesDecrypt(key).decode('utf8')
    print(decryptstr)
    if serialnumber in decryptstr:
      if 'Buy' in decryptstr:
        print('>> Buy')
        print(">> 驗證完成")
        return 1
      elif 'Trial' in decryptstr:
        print('>> Trial')
        return 2
  rand = str(random.randrange(1,1000))
  serialnumber = getCVolumeSerialNumber() + rand
  print(serialnumber)
  encryptstr = DesEncrypt(serialnumber).decode('utf8')
  print(">> 序列號:",encryptstr)
  while True:
    key = input(">> 驗證碼:")
    try:
      decryptstr = DesDecrypt(key.encode('utf8')).decode('utf8')
      print(decryptstr)
      if serialnumber in decryptstr:
        if 'Buy' in decryptstr:
          print('>> Buy')
          with open('conf.bin','wb') as fp:
            fp.write(b2a_hex(key.encode('utf8')))
            print(">> 驗證完成")
          return 1
        elif 'Trial' in decryptstr:
          print('>> Trial')
          return 2
    except Exception as e:
      print(e)
      print(">> 輸入錯誤")
      continue

效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。