You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的PGPy加密文件报错:密钥缺少加密权限标志

解决PGPy密钥权限标志错误与完整加解密实现

问题原因

你遇到的PGPError是因为当前使用的公钥未配置加密存储/通信权限标志,PGPy会严格校验密钥用途与操作类型是否匹配。另外,生成密钥后只看到私钥是因为PGPy的密钥对象同时包含公私钥,需单独导出公钥使用。

步骤1:生成带加密权限的PGP公私钥对

以下代码生成符合加密要求的密钥对,并分别导出公私钥到文件:

from pgpy import PGPKey, PGPUID
import datetime

# 生成2048位RSA密钥对
key = PGPKey.new(PGPKey.RSA, 2048)

# 添加用户标识,配置密钥用途(必填加密权限)
uid = PGPUID.new("你的名称", email="your@email.com", comment="加密专用PGP密钥")
key.add_uid(uid, usage={
    'encrypt': True,  # 启用加密权限,解决权限标志报错的核心配置
    'sign': True      # 可选:同时启用签名权限,若无需签名可删除
}, expires=datetime.datetime.now() + datetime.timedelta(days=365))  # 设置1年有效期

# 导出私钥到文件(务必妥善保管)
with open('private_key.asc', 'w') as f:
    f.write(str(key))

# 从私钥中提取公钥并保存
pub_key = key.pubkey
with open('public_key.asc', 'w') as f:
    f.write(str(pub_key))

步骤2:使用公钥加密文件

修正加密代码,加载带加密权限的公钥完成文件加密:

from pgpy import PGPKey, PGPMessage
import io

# 加载合法的加密公钥
pub_key, _ = PGPKey.from_file('public_key.asc')

# 读取目标文件内容
with io.open('test.csv', 'r', newline='', encoding='utf-8') as csv_file:
    input_data = csv_file.read()

# 创建PGP消息并执行加密
msg = PGPMessage.new(input_data)
encrypted_message = pub_key.encrypt(msg)

# 保存加密后的文件
with open('test.csv.pgp', 'w') as f:
    f.write(str(encrypted_message))

步骤3:使用私钥解密文件

用对应私钥解密加密后的文件:

from pgpy import PGPKey, PGPMessage

# 加载私钥(若私钥设置了密码,需传入密码参数解锁)
priv_key, _ = PGPKey.from_file('private_key.asc')

# 读取加密消息
with open('test.csv.pgp', 'r') as f:
    encrypted_msg = PGPMessage.from_file(f)

# 解密操作:无密码直接调用unlock(),有密码则传入密码字符串
with priv_key.unlock():
    decrypted_data = priv_key.decrypt(encrypted_msg).message

# 保存解密后的文件
with open('decrypted_test.csv', 'w', encoding='utf-8') as f:
    f.write(decrypted_data)

关键提示

  • 密钥用途:生成密钥时必须指定'encrypt': True,否则无法通过PGPy的权限校验。
  • 公私钥关联:私钥包含完整的公钥信息,无需单独生成公钥,通过key.pubkey提取即可。
  • 密码保护:若需给私钥加密码,可在生成后执行key.protect("你的密码", PGPKey.PassphraseHash.SHA256),解密前必须先解锁。

内容的提问来源于stack exchange,提问作者Aman shaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:35:28