溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python加密打包程序的方法是什么

發(fā)布時間:2023-04-18 16:24:11 來源:億速云 閱讀:122 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“python加密打包程序的方法是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“python加密打包程序的方法是什么”文章能幫助大家解決問題。

    python加密打包程序

    加密方式:將py文件轉(zhuǎn)為pyd格式

    • 安裝easycython模塊 pip install easycython

    • 使用easycython命令將py轉(zhuǎn)pyd: easycython xx.py, 會在同一目錄生成xx.pyd(如果是64位系統(tǒng)生成的文件名為xx.cp36-win_amd64.pyd);

    • 將xx.cp36-win_amd64.pyd重命名為xx.pyd;

    • 使用pyinstaller打包(由于xx.py和xx.pyd在同一目錄, pyinstaller會優(yōu)先打包pyd), 打包時添加—hidden-import xx選項.

    • 生成的打包文件中會包含xx.pyd;

    • 注意: 如果打包時使用了—key選項, 但打包的模塊是pyd格式的, 則pyd文件不會被加密, 只是打包

    打包腳本:        

     打包參數(shù)說明:       

    •  -F:僅僅生成一個文件,不暴露其他信息,啟動較慢。

    •         -D:生成一個文件夾,里面是多文件模式,啟動快。

    •         -w:窗口模式打包,不顯示控制臺。

    示例

    pyinstaller -F -w -i logo.ico python_file1.py  python_file2.py  python_file3.py

    補(bǔ)充:Python實現(xiàn)文件簡單加解密

    一、基礎(chǔ)知識

    python中的異或操作符為 ^ ,也記作XOR,按位異或的結(jié)果是:值相同時異或為0,值不同時異或為1,一共有四種情況:0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,使用異或可以對文件進(jìn)行簡單的加解密操作。

    加密操作:首先將文件轉(zhuǎn)換為二進(jìn)制數(shù),再隨機(jī)生成一個與該二進(jìn)制等長的密鑰,將文件的二進(jìn)制數(shù)與密鑰進(jìn)行異或操作,就能得到加密后的二進(jìn)制數(shù),存儲為加密文件。

    解密操作:將加密后的二進(jìn)制文件與密鑰再進(jìn)行異或操作,就能得到原二進(jìn)制數(shù),再將原二進(jìn)制數(shù)恢復(fù)成文件。

    二、加解密算法

    1.導(dǎo)入運行庫
    import json
    from pathlib import Path
    from secrets import token_bytes
    import argparse
    2.定義生成密鑰函數(shù)
    def random_key(length):
        key = token_bytes(nbytes=length)            #根據(jù)指定長度生成隨機(jī)密鑰
        key_int = int.from_bytes(key, 'big')        #將byte轉(zhuǎn)換為int
        return key_int
    3.定義加解密單元
    def encrypt(raw):                                    #加密單元
        raw_bytes = raw.encode()                         #將字符串編碼成字節(jié)串
        raw_int = int.from_bytes(raw_bytes, 'big')       #將byte轉(zhuǎn)換成int
        key_int = random_key(len(raw_bytes))             #根據(jù)長度生成密鑰
        return raw_int ^ key_int, key_int         #將密鑰與文件異或,返回異或后的結(jié)果和密鑰
     
    def decrypt(encrypted, key_int):                             #解密單元
        decrypted = encrypted ^ key_int                          #將加密后的文件與密鑰異或
        length = (decrypted.bit_length() + 7) // 8               #計算所占比特大小
        decrypted_bytes = int.to_bytes(decrypted, length, 'big') #將int轉(zhuǎn)換回byte
        return decrypted_bytes.decode()                          #解碼后返回
    4.加密文件
    def encrypt_file(path, key_path=None, *, encoding='utf-8'):    #參數(shù)path指定文件地址
        path = Path(path)
        cwd = path.cwd() / path.name.split('.')[0]
        path_encrypted = cwd / path.name
        if key_path is None:
            key_path = cwd / 'key'
        if not cwd.exists():
            cwd.mkdir()
            path_encrypted.touch()
            key_path.touch()
     
        //打開文件并將內(nèi)容寫入
        with path.open('rt', encoding=encoding) as f1, \
                path_encrypted.open('wt', encoding=encoding) as f2, \
                key_path.open('wt', encoding=encoding) as f3:
            encrypted, key = encrypt(f1.read())
            json.dump(encrypted, f2)
            json.dump(key, f3)
    5.解密文件
    def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
        path_encrypted = Path(path_encrypted)
        cwd = path_encrypted.cwd()
        path_decrypted = cwd / 'decrypted'
        if not path_decrypted.exists():
            path_decrypted.mkdir()
            path_decrypted /= path_encrypted.name
            path_decrypted.touch()
        if key_path is None:
            key_path = cwd / 'key'
        with path_encrypted.open('rt', encoding=encoding) as f1, \
                key_path.open('rt', encoding=encoding) as f2, \
                path_decrypted.open('wt', encoding=encoding) as f3:
            decrypted = decrypt(json.load(f1), json.load(f2))
            f3.write(decrypted)

    三、測試

    將要加密的文件放到py文件同級目錄下,運行以下將1.txt加密。

    encrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")

    python加密打包程序的方法是什么

     將要解密的文件和密鑰放到py文件同級目錄下,運行以下將1.txt解密還原。

    decrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")

    python加密打包程序的方法是什么

    關(guān)于“python加密打包程序的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI