跳到内容
🛠️ToolsShed

PGP Key Generator

为电子邮件加密和数字签名生成RSA或ECC OpenPGP密钥对。

注意: 密钥使用浏览器中的 Web Crypto API 生成。密钥为 PKCS8/SPKI PEM 格式。如需 OpenPGP 格式,请使用 GPG 进行转换。

关于此工具

PGP(相当好的隐私)是一种使用公钥密码学实现安全电子邮件加密和数字签名的加密系统。它由Phil Zimmermann于1991年创建,已成为互联网上端到端加密通信的标准。PGP对记者、活动人士、商业专业人士以及任何需要保护敏感信息免于被截获的人至关重要。与集中式安全系统不同,PGP让你完全控制你的加密密钥,确保只有你和你的预期接收者能够读取你的信息。

要使用这个PGP密钥生成器,请选择你的密钥类型(RSA 2048/4096或ECC Curve25519)并输入你的名字和电子邮件地址。该工具会生成一个与他人共享的公钥和一个必须安全保管的私钥。生成后,你可以将密钥导入到PGP兼容软件(如GPG、带Enigmail的Thunderbird或Kleopatra)中,然后使用它们来加密电子邮件、签署文档和验证数字通信。你也可以将你的公钥上传到密钥服务器(如keys.openpgp.org),这样其他人可以轻松找到并使用它来向你发送加密消息。

生成密钥时,用强密码短语保护你的私钥——这增加了关键的第二层安全保护。ECC密钥相比RSA提供更快的操作和更小的文件大小,非常适合现代系统,而RSA-4096在处理高度敏感数据时提供额外的安全余量。记住,虽然基于浏览器的密钥生成对大多数用户来说方便且安全,但它有局限性;为了在高威胁环境中获得最大安全性,考虑使用GPG进行离线密钥生成。无论你是刚开始使用加密通信还是管理企业级安全,这个工具都能将密钥生成过程简化为一个快速、直接的工作流程。

常见问题

代码实现

# pip install pgpy
import pgpy
from pgpy.constants import PubKeyAlgorithm, KeyFlags, HashAlgorithm, SymmetricKeyAlgorithm, CompressionAlgorithm

def generate_pgp_keypair(name: str, email: str, passphrase: str = None):
    """Generate an RSA PGP keypair."""
    key = pgpy.PGPKey.new(PubKeyAlgorithm.RSAEncryptOrSign, 4096)
    uid = pgpy.PGPUID.new(name, email=email)
    key.add_uid(
        uid,
        usage={KeyFlags.Sign, KeyFlags.EncryptCommunications},
        hashes=[HashAlgorithm.SHA512, HashAlgorithm.SHA256],
        ciphers=[SymmetricKeyAlgorithm.AES256],
        compression=[CompressionAlgorithm.ZLIB],
    )

    if passphrase:
        key.protect(passphrase, SymmetricKeyAlgorithm.AES256, HashAlgorithm.SHA256)

    public_key = str(key.pubkey)
    private_key = str(key)

    return public_key, private_key

# Generate a keypair
pub, priv = generate_pgp_keypair("Alice Smith", "alice@example.com", "strongpassphrase")
print("=== PUBLIC KEY ===")
print(pub[:100] + "...")
print("=== PRIVATE KEY ===")
print(priv[:100] + "...")

# Encrypt a message
def encrypt_message(public_key_str: str, message: str) -> str:
    pub_key, _ = pgpy.PGPKey.from_blob(public_key_str)
    pgp_msg = pgpy.PGPMessage.new(message)
    encrypted = pub_key.encrypt(pgp_msg)
    return str(encrypted)

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.