当前位置: 代码网 > it编程>前端脚本>Python > Python使用cryptography实现数据加密与解密

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

2026年08月18日 Python 我要评论
1. 背景在实际软件开发中,经常需要保护一些敏感数据,例如:用户配置用户认证信息软件授权信息相机参数设备序列号通信密钥数据库连接信息如果直接使用 json、txt 或 ini 文件保存:usernam

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完整性验证防止数据篡改

对于桌面软件:

  • 工业视觉软件
  • aoi检测软件
  • 测量软件
  • 运动控制软件

推荐:

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

或者:

  • windows credential manager
  • tpm安全芯片
  • usb授权狗
  • 硬件安全模块

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

错误:

用户密码

    ↓

aes/fernet

    ↓

保存

正确:

用户密码

    ↓

hash算法

    ↓

保存

推荐:

  • argon2
  • bcrypt
  • scrypt

15. 工业软件典型架构

                 软件启动

                     |

               configmanager

                     |

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

        |                         |

    config.dat              license.dat

        |                         |

     decrypt                decrypt

        |                         |

    相机参数               授权验证

        |

        ↓

  cameramanager

        |

        ↓

    开始采集

16. 总结

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

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

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

推荐方案:

cryptography

        ↓

     fernet

        ↓

 aes + hmac

        ↓

本地配置 / 授权文件加密

结合:

  • 对象生命周期管理
  • 单例资源管理
  • 配置管理
  • 授权验证

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

以上就是python使用cryptography实现数据加密与解密的详细内容,更多关于python cryptography数据加密与解密的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com