Pywayne Crypto
Verified@wangyendt
npx machina-cli add skill @wangyendt/crypto-2 --openclawPywayne Crypto
加密解密工具集,支持对称加密、自定义密码和代码混淆保护。
Quick Start
from pywayne.crypto import encrypt, decrypt
# 基础加密/解密
encrypted = encrypt("Hello World")
decrypted = decrypt(encrypted)
print(decrypted) # 输出: Hello World
# 使用自定义密码加密
encrypted = encrypt("Secret message", "my_password")
decrypted = decrypt(encrypted, "my_password")
print(decrypted) # 输出: Secret message
encrypt - 加密函数
加密字符串或字节数据。
# 文本加密
encrypted = encrypt("机密信息", "password")
# 字节加密
byte_data = b"binary data"
encrypted = encrypt(byte_data, "password")
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
text | str or bytes | 要加密的文本数据或字节数据 |
password | str | 可选,自定义密码。不提供时使用默认密钥 |
返回值:str - base64 编码的加密字符串
参数类型错误处理:
- 当输入不是
str或bytes时抛出ValueError
decrypt - 解密函数
解密之前加密的字符串。
# 解密(使用默认密钥)
decrypted = decrypt(encrypted_text)
# 解密(使用自定义密码)
decrypted = decrypt(encrypted_text, "my_password")
参数:
| 参数 | 类型 | 说明 |
|---|---|---|
encrypted_text | str | 要解密的 base64 编码字符串 |
password | str | 可选,解密密码。必须与加密时使用的密码相同 |
返回值:str - 解密后的原始字符串
批量操作
支持批量加密和解密操作。
from pywayne.crypto import encrypt, decrypt
data = ["数据1", "数据2", "数据3"]
password = "batch_password"
# 批量加密
encrypted_list = encrypt_batch(data, password)
# 批量解密
decrypted_list = decrypt_batch(encrypted_list, password)
参数:
| 函数 | 参数 | 说明 |
|---|---|---|
encrypt_batch(data_list, password) | data_list: 数据列表 | password: 密码 |
decrypt_batch(encrypted_list, password) | encrypted_list: 加密数据列表 | password: 密码 |
返回值:list[str] - 解密结果列表(失败项目为 None)
配置文件管理
保存和加载加密配置文件(JSON 格式)。
from pywayne.crypto import encrypt, decrypt
# 保存配置
config = {"database": {"host": "localhost", "username": "admin", "password": "secret"}}
save_config(config, "master_password", "config.enc")
# 加载配置
loaded_config = load_config("master_password", "config.enc")
print(loaded_config) # 输出: {'database': {...}}
参数:
| 函数 | 参数 | 说明 |
|---|---|---|
save_config(config_dict, password, filename) | config_dict: 配置字典 | password: 加密密码 |
load_config(password, filename) | password: 解密密码 | filename: 配置文件名 |
异常:
ValueError:配置文件解密失败(密码错误或数据损坏)
加密策略
模块采用分层加密策略,优先使用 Fernet,回退到 XOR。
| 策略 | 说明 | |------|------|------| | Fernet 加密(推荐) | AES-128 对称加密,带消息完整性验证 | | XOR 加密(回退) | 简单异或加密,无依赖,基本功能 | | 代码混淆保护 | Base64 编码隐藏、动态函数生成、命名空间清理 |
错误处理
完善的异常处理机制,支持密码错误、数据格式错误、解密失败等情况。
# 密码错误
try:
decrypted = decrypt(encrypted_text, "wrong_password")
except ValueError:
print("错误: 解密失败,密码不正确")
# 数据格式错误
try:
encrypted = encrypt(123)
except ValueError:
print("错误: 输入类型必须是字符串或字节")
最佳实践
- 密码妥善保管,避免硬编码在源码中
- 高安全性要求的应用使用专业加密库
- 密钥通过环境变量传递,避免写入日志
Overview
Pywayne Crypto is an encryption/decryption toolkit for strings and bytes. It prioritizes Fernet (AES-128) as the default scheme and can fall back to XOR, with optional password protection, code obfuscation, and batch processing to handle multiple items efficiently.
How This Skill Works
Pywayne Crypto runs a layered approach: it first tries Fernet (AES-128) for encryption, with an optional password, and falls back to XOR if needed. The library exposes single-shot (encrypt/decrypt) and batch (encrypt_batch/decrypt_batch) functions, plus config helpers (save_config/load_config). It also includes code obfuscation protections such as Base64 hiding, dynamic function generation, and namespace cleanup.
When to Use It
- Encrypt sensitive strings or bytes before storage or transmission
- Encrypt with a custom password for quick, self-contained protection
- Process large data sets in batches via encrypt_batch and decrypt_batch
- Save and load encrypted configurations (JSON) securely with save_config/load_config
- Obfuscate Python code or protect algorithms with built-in obfuscation features
Quick Start
- Step 1: from pywayne.crypto import encrypt, decrypt
- Step 2: encrypted = encrypt("Hello World")
- Step 3: decrypted = decrypt(encrypted)
Best Practices
- Prefer Fernet (AES-128) as the default for strong security
- Avoid hard-coding passwords; use environment variables or secret managers
- Ensure the decryption password matches the one used for encryption
- Validate input types; encrypt only str or bytes and handle ValueError
- Test both default-key and password-based flows, and monitor decryption failures
Example Use Cases
- Encrypt a secret message with a password and decrypt it with the same password
- Encrypt binary data (e.g., file contents) and decrypt later for use
- Batch encrypt a list of sensitive records and decrypt them in one step
- Save a JSON configuration file securely with save_config and load_config
- Obfuscate a small Python code snippet to deter casual analysis