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

Python不同版本實現(xiàn)配置文件加密

 更新時間:2025年01月07日 09:03:25   作者:logicalsky  
這篇文章主要為大家詳細介紹了Python不同版本下實現(xiàn)配置文件加密的示例代碼,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

AES對稱加密

AES(Advanced Encryption Standard),在密碼學(xué)中又稱Rijndael加密法,是美國采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級加密標(biāo)準(zhǔn)由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級加密標(biāo)準(zhǔn)已然成為對稱密鑰加密中最流行的算法之一。

高級加密標(biāo)準(zhǔn)(AES,Advanced Encryption Standard)是密碼學(xué)中的高級加密標(biāo)準(zhǔn),AES為分組加密法,把明文分成一組一組的,每組長度相等,每次加密一組數(shù)據(jù),直到加密完整個明文,在AES標(biāo)準(zhǔn)規(guī)范中,分組長度只能是128位,AES是按照字節(jié)進行加密的,也就是說每個分組為16個字節(jié)(每個字節(jié)8位)。密鑰的長度可以使用128位、192位或256位。這導(dǎo)致密鑰長度不同,推薦加密的輪數(shù)也不同。

1.明文P

沒有經(jīng)過加密的數(shù)據(jù)

2.密鑰K

用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰為接收方與發(fā)送方協(xié)商產(chǎn)生,但不可以直接在網(wǎng)絡(luò)上傳輸,否則會導(dǎo)致密鑰泄漏,通常是通過非對稱加密算法加密密鑰,然后再通過網(wǎng)絡(luò)傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數(shù)據(jù)

3.AES加密函數(shù)

設(shè)AES加密函數(shù)為E,則 C = E(K, P),其中P為明文,K為密鑰,C為密文。也就是說,把明文P和密鑰K作為加密函數(shù)的參數(shù)輸入,則加密函數(shù)E會輸出密文C

4.密文C

經(jīng)加密函數(shù)處理后的數(shù)據(jù)

5.AES解密函數(shù)

設(shè)AES解密函數(shù)為D,則 P = D(K, C),其中C為密文,K為密鑰,P為明文。也就是說,把密文C和密鑰K作為解密函數(shù)的參數(shù)輸入,則解密函數(shù)會輸出明文P

Python Crypto 加密庫

# python不同版本不一樣
pip install pycryptodome   (python3.7.3)

pip install cryptography    (python3.12.2)

python3.7.3 版本

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad


def encrypt_config(config_file, encrypted_file):
    """加密配置文件"""

    # 生成一個 16 字節(jié)的隨機密鑰
    key = get_random_bytes(16)
    print("Key: ", key)

    # 讀取配置文件
    with open(config_file, 'rb') as f:
        plaintext = f.read()

    # 加密
    cipher = AES.new(key, AES.MODE_CBC)
    ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))

    with open(encrypted_file, 'wb') as f:
        f.write(cipher.iv)
        f.write(ciphertext)
    print(f'File encrypted: {encrypted_file}')


def encrypt_config_one_key(config_files, encrypted_files):
    """加密配置文件,多個文件用同一個密鑰"""

    if not isinstance(config_files, list) or not isinstance(encrypted_files, list):
        raise TypeError('config_files and encrypted_files must be list')

    # 生成一個 16 字節(jié)的隨機密鑰
    key = get_random_bytes(16)
    print("Key: ", key)

    config_add_key(config_files[0], encrypted_files[0], key)
    config_add_key(config_files[1], encrypted_files[1], key)
    return


def config_add_key(config_file, encrypted_file, key):

    # 讀取配置文件
    with open(config_file, 'rb') as f:
        plaintext = f.read()

    # 加密
    cipher = AES.new(key, AES.MODE_CBC)
    ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))

    with open(encrypted_file, 'wb') as f:
        f.write(cipher.iv)
        f.write(ciphertext)
    print(f'File encrypted: {encrypted_file}')


def decrypt_config(encrypted_file, key):
    """解密配置文件"""
    # 解密
    with open(encrypted_file, 'rb') as f:
        iv = f.read(16)
        encrypted_data = f.read()

    cipher = AES.new(key, AES.MODE_CBC, iv)
    config_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)

    print(f'解密后的數(shù)據(jù): {config_data.decode()}')



if __name__ == '__main__':
    # file1 = "/home/pi/printer_data/config/printer.cfg"
    # target1 = "/home/pi/printer_data/config/test/printer_test.cfg"

    # # encrypt_config(file1, target1)

    # key1 = b'.)7[\x8c\xab\x12Y\xd6tm\x06\xe2\xd1l\xb5'
    # key2 = b'\xf9\x19Uf\x11\xe9q\x0ci\x87\xe32%\xf8:W'
    # # decrypt_config(target1, key1)
    # decrypt_config(target2, key2)

python3.12.2 版本

import pickle
import configparser

from cryptography.fernet import Fernet
import os

def cfg2bin(file, result_file):
    # 讀取配置文件
    config = configparser.ConfigParser()
    config.read(file)
    # 將配置文件對象序列化為二進制文件
    with open(result_file, 'wb') as f:
        pickle.dump(config, f)


def encrypt_config(config_file, encrypted_file):
    """加密配置文件"""
    # 生成密鑰
    key = Fernet.generate_key()
    print("Key: ", key)

    # 讀取配置文件內(nèi)容
    with open(config_file, 'r') as f:
        config_data = f.read()

    # 使用密鑰加密配置數(shù)據(jù)
    fernet = Fernet(key)
    encrypted_data = fernet.encrypt(config_data.encode())

    # 寫入加密后的文件
    with open(encrypted_file, 'wb') as f:
        f.write(encrypted_data)

    print(f'配置文件已加密并保存為: {encrypted_file}')


def decrypt_config(encrypted_file, key):
    """解密配置文件"""
    # 讀取加密后的文件
    with open(encrypted_file, 'rb') as f:
        encrypted_data = f.read()

    # 使用密鑰解密配置數(shù)據(jù)
    fernet = Fernet(key)
    config_data = fernet.decrypt(encrypted_data).decode()

    print(f'解密后的數(shù)據(jù): {config_data}')


if __name__ == '__main__':
    file1 = "/home/cln/printer_data/config/printer.cfg"
    file2 = "/home/cln/printer_data/config/mainsail.cfg"
    target1 = "/home/cln/printer_data/config/test/printer_test.cfg"
    target2 = "/home/cln/printer_data/config/test/mainsail.cfg"

    # encrypt_config(file1, target1)
    key1 = b'FN8eGSYuXtK2K7-X2jUcm6r1FK16PAzdTMOpg6wyLGQ='
    decrypt_config(target1, key1)

涉及模塊

  • moonraker 動態(tài)修改配置文件模塊
  • klippy 讀取配置模塊

擠出機配置剝離

在打印機初始化加載完配置文件后,只針對擠出機的參數(shù)進行賦值,達到棄用配置文件里的參數(shù)值

擠出機配置參數(shù)賦值實現(xiàn),可以創(chuàng)建一個常量類(放在util目錄下),或者單獨創(chuàng)建一個擠出機的ini配置,放在klippy目錄下

或者在toolhead模塊加載擠出機對象之前進行擠出機配置參數(shù)賦值

配置文件參數(shù)

extruder 用到的所有參數(shù)值信息

到此這篇關(guān)于Python不同版本實現(xiàn)配置文件加密的文章就介紹到這了,更多相關(guān)Python配置文件加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

夏邑县| 观塘区| 茌平县| 呼伦贝尔市| 黑水县| 南皮县| 广德县| 三门峡市| 台南市| 平安县| 丰都县| 定日县| 华容县| 余江县| 铅山县| 汶上县| 西乌珠穆沁旗| 金寨县| 宽城| 沈丘县| 神池县| 南汇区| 西安市| 耒阳市| 东光县| 商城县| 汉阴县| 建阳市| 葵青区| 河东区| 南陵县| 顺平县| 望江县| 原阳县| 广西| 康平县| 闽清县| 济源市| 十堰市| 潜江市| 临澧县|