python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python cryptography数据加密与解密

Python使用cryptography实现数据加密与解密

作者:m0_61749394

在实际软件开发中,经常需要保护一些敏感数据,本文教你用Python的cryptography库中的Fernet对称加密算法,轻松加密本地数据,保护用户配置、软件授权、设备参数等敏感信息,从安装到封装管理类,再到加密JSON配置文件,步骤清晰,工业软件开发者必看,需要的朋友可以参考下

1. 背景

在实际软件开发中,经常需要保护一些敏感数据,例如:

如果直接使用 JSON、TXT 或 INI 文件保存:

username=admin
password=123456
camera_ip=192.168.1.100

用户可以直接查看和修改,存在安全风险。

对于工业软件、视觉检测软件、设备控制软件而言,配置文件安全非常重要。

Python 提供了 cryptography 加密库,可以方便地实现数据加密存储。

本文介绍基于:

Fernet 对称加密算法

实现本地数据加密与解密。

2. 安装 cryptography

使用 pip 安装:

pip install cryptography

检查安装版本:

import cryptography

print(cryptography.__version__)

3. 加密算法选择

cryptography 支持多种密码算法:

算法类型特点
Fernet对称加密简单、安全、推荐
AES对称加密工业应用常用
RSA非对称加密用于密钥交换
HMAC完整性验证防止数据篡改

对于桌面软件:

推荐:

Fernet

Fernet 内部使用:

AES-128-CBC
+
HMAC-SHA256

同时提供:

4. 生成密钥

Fernet 加密需要一个密钥。

from cryptography.fernet import Fernet


key = Fernet.generate_key()

print(key)


with open(
    "secret.key",
    "wb"
) as f:
    f.write(key)

生成:

secret.key

文件内容:

加密密钥

注意:

该文件非常重要。

丢失:

无法恢复加密数据。

泄露:

加密失效。

5. 加载密钥

from cryptography.fernet import Fernet


def load_key():

    with open(
        "secret.key",
        "rb"
    ) as f:

        return f.read()



key = load_key()


cipher = Fernet(key)

此时:

cipher

就是加密工具。

6. 字符串加密

例如:

username = "admin"

password = "123456"


data = (
    username
    +
    ":"
    +
    password
)


encrypted = cipher.encrypt(
    data.encode("utf-8")
)


print(encrypted)

输出:

b'gAAAAABxxxxxxxxxxxx'

保存后:

用户无法直接读取真实内容。

7. 数据解密

decrypt_data = cipher.decrypt(
    encrypted
)


result = decrypt_data.decode(
    "utf-8"
)


print(result)

输出:

admin:123456

8. 封装加密管理类

实际项目建议封装:

from cryptography.fernet import Fernet



class CryptoManager:


    def __init__(self,key_file):

        self.key_file = key_file

        self.key = self.load_key()

        self.cipher = Fernet(
            self.key
        )



    def load_key(self):

        with open(
            self.key_file,
            "rb"
        ) as f:

            return f.read()



    def encrypt(self,data):

        if isinstance(
            data,
            str
        ):

            data = data.encode(
                "utf-8"
            )


        return self.cipher.encrypt(
            data
        )



    def decrypt(self,data):

        result = self.cipher.decrypt(
            data
        )


        return result.decode(
            "utf-8"
        )

9. 使用示例

初始化:

crypto = CryptoManager(
    "secret.key"
)

加密:

text = "Camera_IP=192.168.1.10"


encrypt_text = crypto.encrypt(
    text
)


print(encrypt_text)

解密:

result = crypto.decrypt(
    encrypt_text
)


print(result)

输出:

Camera_IP=192.168.1.10

10. 加密 JSON 配置文件

工业软件通常保存:

{
    "camera_ip":"192.168.1.100",
    "device_id":"CAM001",
    "license":"ABCDEFG",
    "exposure":5000
}

读取:

import json


with open(
    "config.json",
    "r",
    encoding="utf-8"
) as f:

    config=json.load(f)

转换:

text=json.dumps(
    config,
    ensure_ascii=False
)

加密:

encrypted = crypto.encrypt(
    text
)

保存:

with open(
    "config.dat",
    "wb"
) as f:

    f.write(encrypted)

最终文件:

config.dat

内容类似:

gAAAAABlxxxxxxxx

用户无法直接修改参数。

11. 读取加密配置

with open(
    "config.dat",
    "rb"
) as f:

    data=f.read()



text = crypto.decrypt(
    data
)



config=json.loads(
    text
)


print(config)

恢复:

{
    "camera_ip":"192.168.1.100",
    "device_id":"CAM001",
    "license":"ABCDEFG"
}

12. 软件授权应用

授权文件:

{
    "machine_id":"PC001",
    "expire":"2027-01-01",
    "level":"PRO"
}

软件启动流程:

启动软件

    ↓

读取 license.dat

    ↓

解密

    ↓

验证机器码

    ↓

验证有效期

    ↓

加载功能模块

应用:

13. 密钥安全设计

错误方式

不要:

KEY=b"xxxxxxxx"

原因:

推荐方式

软件目录:

Application

 ├── app.exe
 ├── config.dat
 └── license.dat

系统安全区域:

secret.key

或者:

14. 密码不能直接加密保存

错误:

用户密码

    ↓

AES/Fernet

    ↓

保存

正确:

用户密码

    ↓

Hash算法

    ↓

保存

推荐:

15. 工业软件典型架构

                 软件启动

                     |

               ConfigManager

                     |

        +------------+------------+

        |                         |

    config.dat              license.dat

        |                         |

     decrypt                decrypt

        |                         |

    相机参数               授权验证

        |

        ↓

  CameraManager

        |

        ↓

    开始采集

16. 总结

cryptography 提供了一套可靠的 Python 数据保护方案。

在工业视觉软件、检测软件、设备控制软件中,可以用于:

✅ 配置文件加密
✅ 软件授权保护
✅ 设备参数保护
✅ 通信密钥保存
✅ 用户数据保护

推荐方案:

cryptography

        ↓

     Fernet

        ↓

 AES + HMAC

        ↓

本地配置 / 授权文件加密

结合:

可以有效提升工业软件的安全性和稳定性。

以上就是Python使用cryptography实现数据加密与解密的详细内容,更多关于Python cryptography数据加密与解密的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文