跳到内容
🛠️ToolsShed

RSA 密钥对生成器

生成 RSA-2048 或 RSA-4096 密钥对,以 PEM 格式导出。

密钥完全在您的浏览器中生成,使用 Web Crypto API,从不发送至任何服务器。

关于此工具

RSA密钥对生成器基于RSA(Rivest-Shamir-Adleman)算法创建两个数学关联的加密密钥——一个用于加密的公钥和一个用于解密的私钥。这些密钥对于互联网上的安全通信、数字签名和身份验证至关重要。无论您是在构建安全的API、实现基于证书的身份验证,还是设置加密消息传递,可靠的RSA密钥生成器都是现代安全基础设施的基石。

要使用此工具,只需选择您所需的密钥大小(RSA-2048或RSA-4096),点击生成,该工具将以标准PEM格式生成两个密钥,可以立即使用。RSA-2048适合大多数应用程序,在可预见的未来提供强大的安全性,而RSA-4096以略慢的操作速度为代价提供额外的安全余量。生成后,您可以分别复制每个密钥以在您的应用程序、配置文件或密码系统中使用。

常见问题

代码实现

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.backends import default_backend

# Generate RSA key pair
def generate_rsa_key_pair(
    key_size: int = 2048,
    public_exponent: int = 65537,
) -> tuple[rsa.RSAPrivateKey, rsa.RSAPublicKey]:
    private_key = rsa.generate_private_key(
        public_exponent=public_exponent,
        key_size=key_size,
        backend=default_backend(),
    )
    return private_key, private_key.public_key()

# Serialize to PEM
def private_key_to_pem(key: rsa.RSAPrivateKey, password: bytes | None = None) -> str:
    encryption = (
        serialization.BestAvailableEncryption(password)
        if password else serialization.NoEncryption()
    )
    return key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=encryption,
    ).decode()

def public_key_to_pem(key: rsa.RSAPublicKey) -> str:
    return key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo,
    ).decode()

# Sign and verify
def sign(message: bytes, private_key: rsa.RSAPrivateKey) -> bytes:
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA256())

def verify(message: bytes, signature: bytes, public_key: rsa.RSAPublicKey) -> bool:
    try:
        public_key.verify(signature, message, padding.PKCS1v15(), hashes.SHA256())
        return True
    except Exception:
        return False


if __name__ == "__main__":
    priv, pub = generate_rsa_key_pair(2048)
    print(private_key_to_pem(priv))
    print(public_key_to_pem(pub))

    msg = b"Hello, RSA!"
    sig = sign(msg, priv)
    print("Signature valid:", verify(msg, sig, pub))

Comments & Feedback

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