首页 > 其他分享 >配置文件加密

配置文件加密

时间:2025-01-06 10:46:26浏览次数:1  
标签:加密 file 配置文件 config key encrypted data

AES对称加密

AES(Advanced Encryption Standard),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

高级加密标准(AES,Advanced Encryption Standard)是密码学中的高级加密标准,AES为分组加密法,把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文,在AES标准规范中,分组长度只能是128位,AES是按照字节进行加密的,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。这导致密钥长度不同,推荐加密的轮数也不同。

  • 明文P

没有经过加密的数据

  • 密钥K

用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据

  • AES加密函数

设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C

  • 密文C

经加密函数处理后的数据

  • AES解密函数

设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文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 字节的随机密钥
    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 字节的随机密钥
    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'解密后的数据: {config_data.decode()}')



if __name__ == '__main__':
    # file1 = "/home/pi/printer_data/config/printer.cfg"
    # file2 = "/home/pi/printer_data/config/flsun_func.cfg"
    # target1 = "/home/pi/printer_data/config/test/printer_test.cfg"
    # target2 = "/home/pi/printer_data/config/test/flsun_func.cfg"
    #
    # # encrypt_config(file1, target1)
    # # encrypt_config(file2, target2)
    # 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)
    config_files = ["/home/pi/printer_data/config/printer.cfg", "/home/pi/printer_data/config/flsun_func.cfg"]
    target_files = ["/home/pi/printer_data/config/test/printer_test.cfg", "/home/pi/printer_data/config/test/flsun_func.cfg"]

    # encrypt_config_one_key(config_files, target_files)

    key = b'F.r\xeaH\xfb\xf5\x9d\xe9_\x1b\xba\rW`\xaa'

    # decrypt_config(target_files[0], key)
    decrypt_config(target_files[1], key)

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)

    # 读取配置文件内容
    with open(config_file, 'r') as f:
        config_data = f.read()

    # 使用密钥加密配置数据
    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()

    # 使用密钥解密配置数据
    fernet = Fernet(key)
    config_data = fernet.decrypt(encrypted_data).decode()

    print(f'解密后的数据: {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)
    # encrypt_config(file2, target2)
    key1 = b'FN8eGSYuXtK2K7-X2jUcm6r1FK16PAzdTMOpg6wyLGQ='
    key2 = b'dbBmLzpyO20jqphgQsIbCPxIpNAG-q7s6E8rxu3K4Wo='
    decrypt_config(target1, key1)
    # decrypt_config(target2, key2)

加密效果

涉及模块

  • moonraker 动态修改配置文件模块
  • klippy 读取配置模块

挤出机配置剥离

  • 在打印机初始化加载完配置文件后,只针对挤出机的参数进行赋值,达到弃用配置文件里的参数值
  • 挤出机配置参数赋值实现,可以创建一个常量类(放在util目录下),或者单独创建一个挤出机的ini配置,放在klippy目录下
  • 或者在toolhead模块加载挤出机对象之前进行挤出机配置参数赋值

  • 配置文件参数

  • extruder 用到的所有参数值信息

标签:加密,file,配置文件,config,key,encrypted,data
From: https://www.cnblogs.com/logicalsky/p/18654756

相关文章

  • DooTask | DooTask任务管理工具:数据加密、端到端加密、多语言支持
    DooTask|DooTask任务管理工具:数据加密、端到端加密、多语言支持一、前言二、数据加密与端到端加密:保障数据安全与隐私2.1保护项目机密2.2增强团队信任2.3端到端加密的优势2.4灵活的加密设置三、多语言支持:提升跨国团队协作效率3.1完全本地化界面3.2实时消息......
  • VMware虚拟机配置文件(.vmx)损坏修复
    VMware虚拟机配置文件(.vmx)损坏修复  转载出处前言:对于VMware虚拟机配置文件(.vmx)损坏大家发生故障的原因可能跟我不一样,可是解决方法应该是一样的.可是本方法仅适用.vmx文件损坏而其它文件完善无损的情况。   问题发生:近期一直在研究hadoop,今天刚搭建完HBas......
  • 学习- Nginx-浅谈nginx配置文件的含义
    conf目录下的nginx.conf文件worker_processes1;--工作进程个数(通常是一个物理CPU内核设置一个进程个数)events{--事件驱动模块worker_connections1024;--一个工作进程可以创建多少个工作链接默认1024}http{includemim......
  • Nginx——入门介绍、安装与核心配置文件结构(一/五)
    目录1.Nginx简介1.1.背景介绍1.2.名词解释1.3.常见服务器对比1.3.1.IIS1.3.2.Tomcat1.3.3.Apache1.3.4.Lighttpd1.3.5.其他的服务器1.4.Nginx的优点1.4.1.速度更快、并发更高1.4.2.配置简单,扩展性强1.4.3.高可靠性1.4.4.热部署1.4.5.成本低、BSD许可证1.5.Nginx的......
  • WinRAR中“自动加密”如何使用?
    WinRAR加密大家都不陌生,那么自动加密功能大家熟悉嘛?如何使用自动加密功能?今天介绍详细教程给大家。打开WinRAR软件之后选择工具栏中的【选项】,点击设置然后切换到【压缩】选项卡,点击【创建默认配置】,在新弹出的提示框中选择【设置密码】我们在密码设置框内输入密码,进行确......
  • 【配置文件】toml 配置文件的介绍以及使用
    在开发中,我们经常使用各种配置文件,通常会使用ini,json,xml,yaml,toml,properties,env等。ini-一种简单的配置文件格式,使用section和键值对来存储数据。json(JavaScriptObjectNotation)-轻量级数据交换格式,易于人阅读和编写。xml(eXtensibleMarkupLanguage)-一种标记......
  • 恶意软件常用加密算法
    前面主要是加密字符串信息,加密算法还可以加密shellcode、通信数据包、配置信息等一、常用加密算法概述加密配置信息、加密通信信道、加密窃取数据、混淆代码放置静态分析总体来说就是加密shellcode、代码模块、配置信息、通信等二、加密配置信息设置一个场景,恶意dll文件,放在h......
  • txt文件加密的四种方法
    在数字化时代,信息安全至关重要。TXT文件作为最常用的文本格式之一,经常包含敏感或私人信息。因此,了解如何加密TXT文件变得尤为重要。本文将介绍三种有效的加密方法:利用Windows系统自带的加密功能、WINRAR加密功能以及使用奥凯丰极简加密软件,帮助您轻松保护数据安全。方法一:RAR......
  • ts配置文件中 "noEmit": true, 的作用
    在TypeScript的配置文件(通常是tsconfig.json)中,"noEmit":true是一个编译选项,用于控制TypeScript编译器的行为。具体来说,这个选项的作用是告诉编译器不生成任何输出文件,即不会将TypeScript文件编译成JavaScript文件或声明文件。详细解释默认行为:当"noEmit"设置为f......
  • 【代码】Python|Windows 批量尝试密码去打开加密的 Word 文档(docx和doc)
    文章目录前言完整代码Githubdocxdoc代码解释1.msoffcrypto方法(用于解密.docx文件)read_secret_word_file函数密码生成与解密尝试try_decrypt_file函数2.comtypes方法(用于解密.doc文件)read_secret_word_file函数注意事项总结结语前言加密永远只能拦住......