Lewati ke konten
🛠️ToolsShed

Generator Pasangan Kunci RSA

Membuat pasangan kunci RSA-2048 atau RSA-4096 dalam format PEM.

Kunci dihasilkan sepenuhnya di peramban Anda menggunakan Web Crypto API dan tidak pernah dikirim ke server mana pun.

Tentang alat ini

Pembuat pasangan kunci RSA menciptakan dua kunci kriptografi yang terhubung secara matematis—kunci publik untuk enkripsi dan kunci pribadi untuk dekripsi—berdasarkan algoritma RSA (Rivest-Shamir-Adleman). Kunci-kunci ini penting untuk komunikasi aman, tanda tangan digital, dan otentikasi di seluruh Internet. Baik Anda membangun API yang aman, menerapkan autentikasi berbasis sertifikat, atau menyiapkan pertukaran pesan terenkripsi, pembuat kunci RSA yang dapat diandalkan adalah alat fundamental untuk infrastruktur keamanan modern.

Untuk menggunakan alat ini, cukup pilih ukuran kunci yang diinginkan (RSA-2048 atau RSA-4096), klik generate, dan alat akan menghasilkan kedua kunci dalam format PEM standar, siap digunakan segera. RSA-2048 cocok untuk sebagian besar aplikasi dan memberikan keamanan yang kuat untuk masa depan yang dapat diramalkan, sedangkan RSA-4096 menawarkan margin keamanan tambahan dengan biaya operasi yang sedikit lebih lambat. Setelah dibuat, Anda dapat menyalin setiap kunci secara terpisah untuk digunakan dalam aplikasi, file konfigurasi, atau sistem kriptografi Anda.

Pertanyaan yang Sering Diajukan

Implementasi Kode

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.