Python Fernet vs AES-CBC:4个真实场景下的加密存储选型建议

第一章:Python智能体数据加密存储

在分布式系统与自动化任务日益普及的背景下,Python智能体常需处理敏感数据。为确保数据在本地或网络传输过程中的安全性,加密存储成为不可或缺的技术手段。通过集成成熟的加密库,开发者可实现对配置信息、用户凭证或临时缓存数据的安全保护。

选择合适的加密算法

Python推荐使用cryptography库进行现代加密操作。该库支持对称加密(如Fernet),提供简单且安全的API接口,适用于大多数智能体场景。
  • Fernet算法基于AES-128-CBC,保证数据不可逆加密
  • 自带消息验证机制,防止密文被篡改
  • 密钥必须妥善保管,建议由环境变量注入

实现加密存储功能

以下代码展示了如何使用Fernet对敏感数据进行加密并保存至本地文件:
# 导入必要模块
from cryptography.fernet import Fernet
import os

# 生成密钥(仅首次运行时执行)
# key = Fernet.generate_key()
# with open("secret.key", "wb") as key_file:
#     key_file.write(key)

# 加载密钥
def load_key():
    return open("secret.key", "rb").read()

# 加密字符串
def encrypt_data(data: str):
    f = Fernet(load_key())
    encrypted_data = f.encrypt(data.encode())
    with open("data.enc", "wb") as file:
        file.write(encrypted_data)

# 解密数据
def decrypt_data():
    f = Fernet(load_key())
    with open("data.enc", "rb") as file:
        encrypted_data = file.read()
    return f.decrypt(encrypted_data).decode()

# 示例调用
encrypt_data("数据库密码:admin123")
print(decrypt_data())  # 输出明文
文件名用途访问权限建议
secret.key存储加密密钥chmod 600
data.enc存储加密后的数据chmod 640
graph TD A[原始数据] --> B{是否加密?} B -- 是 --> C[使用Fernet加密] C --> D[保存至data.enc] B -- 否 --> E[直接存储 - 不推荐] D --> F[读取时自动解密]

第二章:Fernet加密机制深度解析与应用

2.1 Fernet对称加密原理与标准实现

Fernet 是一种基于对称密钥的加密规范,确保数据在传输或存储过程中的机密性与完整性。它采用 AES-128-CBC 模式进行加密,并结合 HMAC-SHA256 实现消息认证。
核心特性
  • 自包含:密文包含初始化向量(IV)、时间戳和签名
  • 防重放攻击:通过时间戳验证有效期
  • 无需额外认证机制:内置完整性校验
Python 标准实现示例
from cryptography.fernet import Fernet

# 生成密钥
key = Fernet.generate_key()
f = Fernet(key)

# 加密
token = f.encrypt(b"secret message")
print(token)

# 解密
plain = f.decrypt(token)
print(plain.decode())
上述代码中,Fernet.generate_key() 生成 32 字节 URL 安全 base64 编码密钥;encrypt() 输出包含时间戳、IV 和 HMAC 的完整令牌;decrypt() 自动验证签名与过期时间,确保安全性。

2.2 使用cryptography库实现Fernet加解密

Fernet是一种基于对称加密的高效安全方案,Python的`cryptography`库提供了完整的Fernet实现,适用于保护敏感数据的传输与存储。
安装与依赖
首先需安装cryptography库:
pip install cryptography
该命令将安装包含Fernet支持在内的核心加密组件。
生成密钥与加解密操作
Fernet要求使用URL安全的Base64编码密钥。可通过以下代码生成:
from cryptography.fernet import Fernet

# 生成密钥
key = Fernet.generate_key()
f = Fernet(key)

# 加密
token = f.encrypt(b"secret message")
print("加密后:", token)

# 解密
plain = f.decrypt(token)
print("解密后:", plain.decode())
其中,`generate_key()`生成32字节安全密钥,`encrypt()`返回包含时间戳的Token,`decrypt()`自动验证完整性与时效性。
关键特性说明
  • 自动处理AES-CBC加密与PKCS7填充
  • 内置HMAC签名防止篡改
  • 支持TTL机制,可设置过期时间

2.3 Fernet在智能体会话数据保护中的实践

在智能体系统中,会话数据的安全传输至关重要。Fernet作为对称加密方案,基于AES-128-CBC算法,确保数据的机密性与完整性。
加密流程实现
from cryptography.fernet import Fernet

# 生成密钥
key = Fernet.generate_key()
f = Fernet(key)

# 加密会话数据
token = f.encrypt(b"session_data=user123;expires=3600")
上述代码生成唯一密钥并初始化Fernet实例,encrypt()方法返回URL安全的Base64编码令牌,适用于网络传输。
解密与验证
  • 接收方使用相同密钥实例化解密器
  • Fernet自动验证时间戳和HMAC签名
  • 过期或篡改的数据将触发InvalidToken异常

2.4 自动过期令牌与密钥轮换策略设计

在现代安全架构中,自动过期令牌和密钥轮换是降低长期凭证泄露风险的核心机制。通过设定合理的生命周期,系统可动态替换加密密钥并撤销旧令牌。
令牌自动过期实现
使用JWT时,应明确设置exp(过期时间)声明,确保令牌在限定时间内失效:
{
  "sub": "1234567890",
  "iat": 1717000000,
  "exp": 1717003600
}
上述配置使令牌有效期为1小时。服务端验证时会自动拒绝过期请求,无需额外逻辑。
密钥轮换策略
推荐采用双密钥并行机制:保留当前密钥(current)和上一版本密钥(previous),支持平滑过渡。配置示例如下:
密钥角色状态有效期
primary启用2025-01-01 ~ 2025-04-01
secondary待激活2025-04-01 ~ 2025-07-01
轮换期间,系统同时支持两个密钥解码,新签发令牌统一使用主密钥。

2.5 Fernet的安全边界与潜在风险分析

Fernet作为一种对称加密方案,其安全性依赖于密钥的保密性与完整性。一旦密钥泄露,所有加密数据将面临被解密的风险。
安全边界限制
  • 仅适用于可信环境中的数据保护
  • 不支持前向保密(Forward Secrecy)
  • 无法抵御重放攻击(Replay Attack)
潜在风险示例
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"secret")
# 若密钥以明文存储,则系统整体安全性下降
上述代码中,若key未通过安全方式管理(如使用密钥管理系统),则加密过程形同虚设。
常见威胁对比
威胁类型是否可防御
窃听是
篡改是
密钥泄露否

第三章:AES-CBC底层原理与工程实现

3.1 AES-CBC模式的密码学基础与填充机制

AES-CBC(Advanced Encryption Standard - Cipher Block Chaining)是一种广泛使用的对称加密模式,通过引入初始向量(IV)实现相同明文块加密为不同密文,增强安全性。
加密流程与IV的作用
在CBC模式中,每个明文块在加密前需与前一个密文块进行异或运算。首个块则与初始化向量IV异或:

// 示例:Go语言中CBC加密核心逻辑片段
block, _ := aes.NewCipher(key)
iv := generateRandomIV() // 必须唯一且不可预测
mode := cipher.NewCBCEncrypter(block, iv)
mode.CryptBlocks(ciphertext, plaintext)
其中,iv 长度必须等于AES块大小(16字节),且每次加密应使用新IV以防止重放攻击。
填充机制:PKCS#7
由于AES是分组加密算法,要求明文长度为块大小的整数倍,不足时需填充。常用PKCS#7标准如下:
原始数据长度 (字节)需填充字节数填充内容
1510x01
1420x02, 0x02
16160x10 × 16
解密后需验证并移除填充,确保数据完整性。

3.2 基于pycryptodome的AES-CBC编码实战

在Python中,`pycryptodome`库提供了对AES加密算法的完整支持。使用CBC(Cipher Block Chaining)模式可有效提升数据安全性,避免相同明文块生成相同密文。
环境准备与依赖安装
首先通过pip安装库:
pip install pycryptodome
注意:需安装`pycryptodome`而非旧版`pycrypto`,以确保安全性和兼容性。
AES-CBC加密实现
以下代码展示如何使用16字节密钥和随机IV进行加密:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16)
iv = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CBC, iv)
data = b"Hello, AES-CBC!"
padded_data = data + b'\x00' * (16 - len(data) % 16)
ciphertext = cipher.encrypt(padded_data)
参数说明:`AES.new()`初始化加密器;`MODE_CBC`启用CBC模式;`iv`确保每次加密结果不同;明文需填充至块长度(16字节)整数倍。
解密流程
解密时需使用相同密钥与IV:
decrypt_cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_padded = decrypt_cipher.decrypt(ciphertext)
decrypted_data = decrypted_padded.rstrip(b'\x00')
解密后通过`rstrip`去除填充字节,恢复原始明文。

3.3 初始向量管理与密钥派生方案优化

在现代加密系统中,初始向量(IV)的随机性与唯一性直接决定加密安全性。为避免重放攻击和模式泄露,采用加密安全伪随机数生成器(CSPRNG)动态生成IV,并通过时间戳与设备指纹组合增强熵源。
基于HKDF的密钥派生优化
使用HMAC-based Extract-and-Expand Key Derivation Function(HKDF)可从主密钥安全派生多用途子密钥,提升密钥复用安全性。
// 使用Go的crypto/hkdf进行密钥派生
import "golang.org/x/crypto/hkdf"

func deriveKey(masterKey []byte, salt, info []byte) []byte {
    hash := crypto.SHA256
    hkdf := hkdf.New(hash, masterKey, salt, info)
    key := make([]byte, 32)
    io.ReadFull(hkdf, key)
    return key
}
上述代码中,masterKey为主密钥,salt为盐值(建议非零且唯一),info用于标识密钥用途,确保不同场景派生出独立密钥。
IV存储与传输策略
  • 每次加密前生成新IV,杜绝重复使用
  • IV以明文随密文一同传输,格式为:[IV][Ciphertext]
  • 服务端接收后按固定长度切分解析

第四章:真实场景下的加密选型对比分析

4.1 场景一:内存中敏感配置项的安全存储

在现代应用架构中,数据库密码、API密钥等敏感配置常需加载至内存运行,但明文存储存在泄露风险。为提升安全性,应采用加密保护与访问控制机制。
加密存储方案
使用对称加密算法(如AES)对敏感配置加密后存入内存,并通过主密钥管理解密过程:

// 示例:Go中使用AES加密配置项
block, _ := aes.NewCipher(masterKey)
gcm, _ := cipher.NewGCM(block)
nonce := make([]byte, gcm.NonceSize())
encrypted := gcm.Seal(nonce, nonce, plaintext, nil)
上述代码中,masterKey由操作系统级密钥管理服务提供,gcm.Seal实现认证加密,确保机密性与完整性。
访问控制策略
  • 限制仅授权线程可解密访问
  • 配置项使用后立即从内存清除
  • 结合seccomp或mlock防止内存页交换到磁盘

4.2 场景二:跨节点智能体通信载荷加密

在分布式智能系统中,跨节点智能体之间的通信安全性至关重要。为防止数据在传输过程中被窃取或篡改,需对通信载荷进行端到端加密。
加密协议选择
推荐使用基于椭圆曲线的ECDH密钥交换与AES-256-GCM加密组合,兼顾性能与安全性。各智能体在初始化阶段交换公钥,建立共享会话密钥。
// Go示例:使用crypto/ecdh生成共享密钥
peerPrivateKey, _ := ecdh.P256().GenerateKey(rand.Reader)
sharedKey, _ := peerPrivateKey.ECDH(publicKey)
cipher, _ := aes.NewCipher(sharedKey)
gcm, _ := cipher.NewGCM(cipher)
encrypted := gcm.Seal(nil, nonce, plaintext, nil)
上述代码实现ECDH密钥协商后,使用AES-GCM模式加密明文载荷。其中nonce需每次通信随机生成,确保相同明文产生不同密文。
密钥管理策略
  • 会话密钥定期轮换,降低长期密钥泄露风险
  • 使用HMAC-SHA256对密钥派生过程进行完整性校验
  • 密钥存储于硬件安全模块(HSM)或TEE环境中

4.3 场景三:持久化日志数据的静态加密

在日志系统中,持久化存储的日志文件可能包含敏感信息,因此必须对静态数据实施加密保护。
加密策略选择
常见方案包括全盘加密、文件级加密和数据库透明加密(TDE)。对于日志系统,推荐使用文件级AES-256加密,兼顾性能与安全性。
实现示例:使用OpenSSL加密日志文件

# 加密日志文件
openssl enc -aes-256-cbc -salt -in app.log -out app.log.enc -pass pass:mysecretpassword

# 解密操作
openssl enc -aes-256-cbc -d -in app.log.enc -out app.log.dec -pass pass:mysecretpassword
该命令使用AES-256-CBC模式加密日志文件,-salt增强抗彩虹表攻击能力,-pass指定密码来源。生产环境应结合密钥管理服务(KMS)提升安全性。
密钥管理建议
  • 避免硬编码密钥,使用KMS或Hashicorp Vault动态获取
  • 定期轮换加密密钥
  • 记录密钥使用审计日志

4.4 场景四:受限环境下轻量级加密适配

在资源受限的嵌入式设备或物联网终端中,传统加密算法因计算开销大而难以部署。为此,轻量级加密算法成为关键解决方案。
典型轻量级算法选择
  • ChaCha20:适用于低功耗CPU,无需硬件加速即可高效运行;
  • Speck:专为小型微控制器设计,支持极小内存 footprint;
  • PRESENT:基于置换盒的分组密码,适合硬件实现。
代码示例:Go 中使用 ChaCha20 简化加密
package main

import (
    "crypto/cipher"
    "crypto/chacha20"
    "encoding/hex"
)

func encrypt(plaintext, key, nonce []byte) ([]byte, error) {
    block, err := chacha20.NewUnauthenticatedCipher(key, nonce)
    if err != nil {
        return nil, err
    }
    var ciphertext = make([]byte, len(plaintext))
    block.XORKeyStream(ciphertext, plaintext)
    return ciphertext, nil
}
上述代码初始化 ChaCha20 密码实例,通过 XORKeyStream 执行流加密。其优势在于仅需 32 字节密钥与 12 字节 nonce,适合存储和带宽受限环境。

第五章:加密策略演进与未来架构思考

随着量子计算的逼近与云原生架构的普及,传统加密策略正面临根本性重构。企业不再满足于静态数据加密,而是转向全链路动态保护机制。
零信任模型下的密钥管理
现代系统采用基于身份的密钥分发策略,结合短期令牌与硬件安全模块(HSM)实现动态密钥轮换。例如,某金融平台通过集成Hashicorp Vault,实现了每小时自动轮换数据库加密密钥,并通过策略引擎控制访问权限。
  • 使用KMS生成主密钥,派生出数据加密密钥(DEK)
  • DEK由密钥加密密钥(KEK)封装后存储
  • 所有解密请求需通过mTLS认证并记录审计日志
同态加密在隐私计算中的实践
某医疗联合分析项目采用部分同态加密(PHE)方案,在不暴露原始数据的前提下完成统计聚合。以下为关键代码片段:

// 使用Paillier库进行加法同态操作
cipher1 := paillier.Encrypt(pubKey, big.NewInt(42))
cipher2 := paillier.Encrypt(pubKey, big.NewInt(58))
// 支持密文相加,解密后结果为100
result := paillier.Add(cipher1, cipher2)
plain := paillier.Decrypt(privKey, result) // 输出100
后量子密码迁移路径
NIST标准化进程推动企业评估抗量子攻击算法。下表对比主流候选方案在TLS握手中的性能表现:
算法公钥大小 (KB)签名时间 (ms)适用场景
Dilithium2.50.8服务端认证
Sphincs+8.23.1固件签名
[客户端] → TLS 1.3 + X25519 + Dilithium → 密钥协商 → 应用数据AES-256-GCM加密传输

相关推荐

Python实现AES文件加密解密:从原理到工程实践

数据加密是信息安全领域的核心基础技术,旨在通过算法将明文转换为不可读的密文,确保数据的机密性。其原理主要基于密码学中的对称加密与非对称加密体系,其中对称加密算法因其高效性,在文件与数据传输保护中应用广泛。AES(高级加密标准)作为当前最主流的对称加密算法,结合CBC等操作模式,能够为二进制数据流提供可靠的加密服务。在工程实践中,通过Python的cryptography库,开发者可以高效地实现基于AES-CBC模式的文件加解密工具,这不仅能满足软件配置、用户文档等敏感数据的本地存储安全需求,其流式处理的设计

weixin_34133829的博客 351

安装python里强大的加解密库Fernet图文教程(详细版)

今天我上网了解了一下关于文件加密的内容,也是偶然吧,我知道了python里的一个很好用的关于加密的库。然后把它好好的利用了一下,写了一个文件加密和解密器。这篇文章,我先介绍一下关于怎么安装这个库。python里的库有很多,这也是python可以成为众多初学者以及网路安全人员喜欢的原因。而基于python的加密库也有很多,比如base64什么的,而我今天所提到的是一个叫fernet的库。首先,我们先来说一下这个库的安装,我们先打开pycharm。(个人推荐使用pycharm,因为确实方便好用)。然后点击左上角

m0_70402478的博客 2522

Python实战AES-GCM文件加密:从原理到安全工具实现

数据加密是信息安全的基础技术,通过特定算法将明文转换为不可读的密文,确保数据在存储和传输过程中的机密性与完整性。其核心原理依赖于密码学中的对称加密与非对称加密体系,其中AES(高级加密标准)作为对称加密的典范,因其高效与安全性被广泛采用。在工程实践中,加密技术不仅保障了个人隐私与商业数据安全,还广泛应用于通信协议、数据库保护及文件系统安全等领域。本文聚焦于AES-GCM这一现代认证加密模式,它结合了加密与认证功能,有效防御篡改攻击。通过Python cryptography库,我们将构建一个包含密钥派生、异

weixin_33770878的博客 351

python使用cryptography.fernet加密文件和读写

可以根据自己的需求设置DataEncryptor中的文件名,密钥和数据格式。直接打开pickle文件,内容如下,说明被加密后无法正确获取数据。

一只博客 2945

Python数据加密实战:从哈希加盐到AES-GCM的安全存储与传输

数据加密是信息安全的核心基础,它通过特定算法和密钥将明文转换为不可读的密文,确保数据的机密性与完整性。其技术原理主要分为对称加密(如AES)和非对称加密(如RSA),前者加解密使用同一密钥,效率高;后者使用公钥/私钥对,解决了密钥分发难题。在工程实践中,加密技术对保护用户隐私、满足合规要求至关重要,广泛应用于密码存储、数据库字段保护、网络通信等场景。本文聚焦Python生态,深入探讨如何通过**安全存储**与**安全传输**两大核心实践,结合`bcrypt`、`cryptography`等库,实现从密码哈希

weixin_30613343的博客 339

敏感数据加密存储实战:从算法选型、密钥管理到数据库集成

数据加密是保障数据机密性与完整性的核心技术,其核心原理在于通过密码学算法将明文信息转换为无法直接识别的密文。在工程实践中,对称加密算法(如AES-256-GCM)因其高效性,成为数据存储加密的主力;而非对称加密则主要用于安全的密钥交换。这项技术的核心价值在于构建端到端的安全防线,即使数据存储介质泄露,攻击者也无法获取有效信息,从而满足GDPR、等保等合规要求。其典型应用场景包括保护用户个人身份信息(PII)、财务数据、医疗记录等敏感业务数据。本文将聚焦于**应用层加密**这一黄金标准,深入探讨如何系统性地设

weixin_34160277的博客 348

Python加密与解密:使用Fernet进行安全通信

通过本文的介绍,你应该对如何在Python中使用Fernet进行数据加密和解密有了基本的了解。正确使用加密技术可以大大提高数据的安全性,保护用户隐私和企业机密。希望本文能为你的项目提供帮助。

1004

Python cryptography库实战:10个核心技巧掌握加密与安全编程

密码学是保障数据安全的基石,其核心原理在于通过数学算法实现信息的加密、解密与认证。在Python生态中,cryptography库作为现代密码学实践的标杆,提供了从哈希、对称加密到非对称加密、数字签名的完整工具链。该库基于OpenSSL等成熟底层库构建,遵循“安全默认值”设计哲学,能有效帮助开发者避免常见安全漏洞。在工程实践中,无论是保护用户密码、加密配置文件,还是实现安全的API通信,cryptography库都能提供坚实支撑。本文聚焦于Fernet对称加密、RSA非对称加密等关键模块,通过10个核心技巧

weixin_30565327的博客 375

Python对称加密详解

Python对称加密详解在当今的信息时代,数据安全显得尤为重要。对称加密作为一种常用的加密方式,被广泛应用于各种场景。在Python中,我们通常使用内建的cryptography库进行对称加密。下面,我们将深入探讨Python中的对称加密。对称加密是一种加密方式,其中加密和解密使用相同的密钥。这种方式的安全性基于密钥的保密性。如果密钥泄露,任何人都可以解密密文,因此,对称加密的关键在于如何安全地存储和传输密钥。

weixin_46121540的博客 2017

Python加密实战:从cryptography库到安全配置管理

加密技术是保障数据机密性与完整性的核心手段,其基本原理是通过特定算法和密钥将明文转换为不可读的密文。在Python生态中,cryptography库提供了高级API与底层原语,帮助开发者实现对称加密(如AES-GCM)、非对称加密(如RSA)及密码哈希(如bcrypt)。这些技术对于保护敏感信息(如API密钥、用户凭证)具有关键价值,广泛应用于Web安全、数据传输、配置文件加密等场景。本文以Python的cryptography库为例,深入解析密钥管理、加密模式选择及常见陷阱,并演示如何构建一个安全的配置文

weixin_29314405的博客 257

Python文件加密实战:从异或原理到完整加密器开发

数据加密是信息安全领域的核心基础,其本质是通过特定算法对原始信息进行可逆变换,确保数据在存储和传输过程中的机密性。在众多加密技术中,对称加密因其加解密使用相同密钥的特性,成为理解加密原理的绝佳起点。异或(XOR)运算凭借其可逆的数学特性(A XOR B XOR B = A),常被用于构建简易的对称加密方案,实现原理清晰且易于编程实现。这种字节级的变换技术,能够直接操作文件的二进制数据,因此具备处理文本、图片、可执行文件等多种文件格式的通用性。对于Python初学者而言,通过实现一个基于异或运算的文件加密器,

weixin_34341117的博客 728

Python进阶之-加密库cryptography使用详解

cryptography 库是一个强大的 Python 加密库,提供了对加密算法和协议的高层和低层访问。它是用来实现数据加密、签名、密钥管理等功能的。以下是一些常见用法的详解,帮助你理解如何使用这个库。

Summer的博客 4115

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 348

Python文件加密实战:基于cryptography库的AES加密与密钥管理

数据加密是信息安全的核心技术,通过特定算法将明文转换为不可读的密文,确保数据在存储和传输过程中的机密性。其原理主要依赖对称加密(如AES)和非对称加密体系,对称加密速度快,适合处理文件等大量数据。在工程实践中,加密技术的价值在于为敏感信息提供端到端的保护,广泛应用于文件安全存储、通信隐私和合规数据管理等领域。本文聚焦Python cryptography库,深入探讨如何利用其Fernet模块和hazmat层,结合PBKDF2密钥派生函数与AES算法,构建一个可定制、跨平台的文件加密解密工具,并详细解析了初始

weixin_30859423的博客 289

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6405

Lm317电压源芯片制作电流源

还在找电流源芯片么?如何使用电压源芯片快速搭建电流源。

Ekko的博客 1万+

Python实现文本加密:从凯撒密码到AES实战

加密技术是信息安全的核心基础,旨在确保数据的机密性、完整性和认证性。其基本原理是通过特定算法和密钥,将可读的明文转换为不可读的密文。对称加密(如AES)使用同一密钥加解密,效率高;非对称加密(如RSA)使用公钥和私钥对,解决了密钥分发难题。在工程实践中,Python凭借其简洁语法和丰富的库生态,如`cryptography`,使得开发者能够高效、安全地实现加密功能。无论是保护本地文件、网络通信,还是构建更复杂的安全应用,掌握Python加密技术都至关重要。本文以`cryptography`库为例,详细演示了

weixin_32736961的博客 201

QTabWidget动态标签页管理:从代码创建到UI设计的实战指南

本文深入探讨了QTabWidget动态标签页管理的实战技巧,涵盖从纯代码创建到UI设计器布局的两种核心方法。详细讲解了如何动态添加、插入、关闭标签页,并管理其内容与生命周期。文章还提供了标签页精细化控制、界面优化(如设置图标、样式表)以及构建简易多文档编辑器的进阶实战案例,帮助开发者灵活应对数据监控、多文档编辑等复杂界面需求。

omega的博客 868

Python实现AES文件夹加密:从原理到工程实践

数据加密是信息安全的核心技术之一,它通过密码学算法将明文转换为无法直接阅读的密文,确保数据在存储和传输过程中的机密性。对称加密算法如AES(高级加密标准)因其高效性和安全性成为广泛应用的标准,其工作原理基于分组密码和特定加密模式(如CBC)对数据进行混淆和扩散。在工程实践中,密钥管理是关键环节,通常使用PBKDF2等密钥派生函数将用户密码转化为高强度密钥,并引入盐值防止彩虹表攻击。这种技术组合特别适用于本地文件与文件夹的加密保护场景,例如开发人员管理敏感项目资料或备份重要文档。本文通过一个具体的Python

weixin_34342905的博客 405

价值投资/指标选股(akshare)

利用akshare的数据源,可以获取所有的股票数据以及公开的财务数据,可以进行条件筛选,获取满足条件的股票。 这套模板可以用于价值投资,指标选股。选股周期为日线级别。然后结果可以邮箱发送。 import time import akshare as ak ## A 股上市公司的实时行情数据 stock_zh_a_spot_df = ak.stock_zh_a_spot() #print(stock_zh_a_spot_df) ##取前300测试 ##取前300测试 df_stock =...

qq_26742269的博客 1万+

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

算法大师! 509

AES256加密技术:从原理到实战,构建安全数字图库的完整指南

在数据安全领域,对称加密是保障数据机密性的核心技术,它通过同一密钥进行加解密,效率极高,尤其适合处理图片、视频等大体积文件。其核心原理在于将明文数据通过加密算法和密钥转换为不可读的密文,只有持有正确密钥的授权方才能还原。这项技术的核心价值在于为静态存储和动态传输中的数据提供“保险箱”级别的保护,防止外部入侵、内部泄露和传输窃听。AES(高级加密标准)作为当前全球公认最可靠的对称加密算法,其256位密钥长度版本(AES256)提供了极高的安全强度,被广泛应用于金融、政府和云服务等对安全性要求极高的场景。本文将

weixin_33938733的博客 371

10分钟搞定manim安装与vscode配置

manim安装与vscode配置

帅帅de三叔 3413

AES与SM4加解密计算器:原理、实现与实战排错指南

对称加密算法是保障数据机密性的核心技术,其通过相同的密钥进行加密和解密操作,确保信息传输的安全。AES(高级加密标准)作为国际通用算法,以其高安全性和效率广泛应用于TLS/SSL、文件加密等领域;而SM4作为我国商用密码标准,在金融、政务等关键场景中扮演重要角色。理解其分组密码原理、工作模式(如CBC、GCM)及填充方案,对于实现安全通信和数据保护具有关键价值。在实际工程中,开发者常面临算法选择、模式配置、数据格式转换(如Hex、Base64编码)及密钥管理等问题。本文聚焦于构建一个集成AES与SM4的本地

weixin_34109408的博客 294

Panda3d 场景管理

许多简单的 3D 引擎维护一个 3D 模型列表,然后在每一帧对这些模型进行渲染。在这些简单的引擎中,必须分配一个3D模型(或从磁盘加载它),然后将其插入到要渲染的模型列表中。模型在插入到列表中之前对渲染器不“可见”。 Panda3D稍微复杂一些。它不是维护要呈现的对象列表,而是维护要呈现的对象树。对象在插入树之前对渲染器不可见。

u014077947的博客 1383

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

云计算加密技术全解析:从TLS到TEE的实战选型指南

加密技术是保障数据安全的基石,其核心原理是通过算法将明文信息转换为无法直接读取的密文,确保数据的保密性、完整性与可用性。在云计算时代,数据在传输、存储与处理的各个环节都面临潜在风险,这使得加密从可选方案变为必备策略。从基础的传输层安全协议到前沿的可信执行环境,不同的加密技术为数据生命周期的各个阶段提供了针对性保护。理解对称加密、非对称加密与哈希函数等基础概念,并结合密钥管理服务与云原生加密服务的工程实践,是构建云上安全防线的关键。本文聚焦于TLS/SSL、AES、客户端加密等热词技术,深入分析其在云环境下的

weixin_34127717的博客 457

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: Python插件热加载技术揭秘:实现智能体无缝扩展的3种方案
下一篇: 【Python大模型API费用控制秘籍】:揭秘高额账单背后的5大元凶及降本增效策略
BytePulse
博客等级 码龄1年 163粉丝 2177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值