Gratis online RSA-sleutelgenerator — ECDSA, Ed25519
RSA-sleutelpaar online genereren — de privésleutel blijft in je browser. RSA 2048/4096, ECDSA en Ed25519, als PKCS#8- of PKCS#1-PEM, met JWK en fingerprint.
PKCS#8 (BEGIN PRIVATE KEY) is de moderne standaard en wat de JDK verwacht. PKCS#1 (BEGIN RSA PRIVATE KEY) is de traditionele vorm van OpenSSL, die sommige gateways nog steeds vereisen. Omschakelen encodeert dezelfde sleutel opnieuw.
Houd deze geheim. Iedereen die hem heeft, kan zich voor je uitgeven.
Hetzelfde soort sleutelpaar genereren met OpenSSL
Ons team controleert de omzetting van PKCS#8 naar PKCS#1 byte voor byte tegen de referentie-uitvoer van de crypto-module van Node, zodat een sleutel die je hier exporteert identiek is aan wat OpenSSL uit hetzelfde materiaal zou produceren.
Wat is een RSA-sleutelgenerator?
Een RSA-sleutelgenerator maakt een wiskundig gekoppeld paar: een privésleutel die je bewaart en een publieke sleutel die je uitdeelt. Alles wat met de privéhelft is ondertekend, is met de publieke helft te verifiëren, en alleen de publieke helft is veilig om te publiceren. Precies die asymmetrie is waar het om draait — daardoor kan een verifieerder jouw handtekeningen controleren zonder ze zelf te kunnen vervalsen, iets wat een gedeeld secret nooit kan bieden.
Deze generator draait in je browser via de Web Crypto API, dus de privésleutel ontstaat in het tabblad en de pagina doet tijdens het genereren geen enkel netwerkverzoek. Naast RSA maakt hij ook ECDSA- en Ed25519-paren, die hetzelfde doel dienen met veel kortere sleutels: een Ed25519-privésleutel is 48 bytes in PKCS#8, terwijl een RSA-sleutel van 2048 bits ruim over 1,2 KB gaat.
Wat mensen laat struikelen is niet de wiskunde maar de verpakking. Dezelfde sleutel kan worden geschreven als PKCS#8, PKCS#1, SPKI of JWK, en een bibliotheek die de ene weigert accepteert vaak de andere, zonder duidelijker melding dan een verwerkingsfout. De tabel verderop koppelt elke container aan de ecosystemen die hem verwachten.
// Verify a downloaded key pair matches, using OpenSSL: openssl pkey -in rsa-2048-private.pem -pubout | diff - rsa-2048-public.pem // No output means the public key really belongs to that private key.
Belangrijkste functies
Gegenereerd in je browser
De sleutels komen uit de Web Crypto API in je eigen tabblad, en de pagina doet tijdens het genereren geen enkel netwerkverzoek. Zet je verbinding uit en het blijft werken, wat laat zien dat de tool geen server nodig heeft om zijn werk te doen.
RSA, ECDSA en Ed25519
RSA 2048, 3072 en 4096; ECDSA op P-256, P-384 en P-521; en Ed25519, allemaal vanaf één pagina met dezelfde exportopties.
Uitvoer in PKCS#8 en PKCS#1
Wissel tussen BEGIN PRIVATE KEY en de traditionele indeling BEGIN RSA PRIVATE KEY zonder OpenSSL aan te raken. De schakelaar encodeert de sleutel die al op het scherm staat opnieuw, dus het blijft dezelfde sleutel.
JWK-export
Beide helften zijn beschikbaar als JSON Web Key. De publieke JWK is wat in een JWKS-document of een JOSE-verifieerder hoort; de private JWK is alleen voor je ondertekenaar en mag nooit worden gepubliceerd.
SHA-256-fingerprint
Bij elk paar hoort een fingerprint van de publieke sleutel, zodat je via een apart kanaal kunt controleren dat beide kanten dezelfde sleutel hebben.
Bijpassende OpenSSL-commando's
Onder de uitvoer staan de commando's waarmee je hetzelfde soort sleutel lokaal maakt, zodat je op elk moment naar de commandoregel kunt overstappen.
Downloads met begrijpelijke namen
Bestanden worden opgeslagen als rsa-2048-private.pem en rsa-2048-public.pem in plaats van onder een algemene downloadnaam die je nog moet hernoemen.
Geen account nodig, geen limiet
Er komt geen server aan te pas, dus er is niets om je voor aan te melden en geen quotum dat op kan raken.
Uitgewerkte voorbeelden
Een Ed25519-paar, volledig getoond
Algoritme: Ed25519
-----BEGIN PRIVATE KEY----- MC4CAQAwBQYDK2VwBCIEIA2HJVU1qChbOJN8XksXVhyD0IjYVt0UU6Mwz814rOFf -----END PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAV5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU= -----END PUBLIC KEY-----
Een Ed25519-privésleutel is 48 bytes in PKCS#8 en de publieke sleutel 44 bytes, dus elk PEM bevat één regel base64. Dit is een wegwerpvoorbeeld — genereer je eigen paar in plaats van dit te kopiëren.
PKCS#8 en PKCS#1 verschillen in de header
Algoritme: RSA 2048, structuur omgeschakeld
PKCS#8: -----BEGIN PRIVATE KEY----- PKCS#1: -----BEGIN RSA PRIVATE KEY-----
Dezelfde sleutel, twee verpakkingen. PKCS#8 legt een algoritme-identificator om de RSA-structuur heen, en daarom werkt het voor elk algoritme terwijl PKCS#1 alleen voor RSA bestaat. De schakelaar encodeert de sleutel die al op het scherm staat opnieuw, dus de fingerprint verandert niet.
Publieke RSA 2048-sleutel
Algoritme: RSA 2048
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk/fbpPCGDyh71m73oB9Bk8+fKVkSThXyWTtpgblB7pX iQBtTvSWVZGHprkLgMGkU2Yw8Z43m1WpoRuYyXNFe92S5viIdVuKTj/VEUuEpzHd ffWMIUw70LaUdTP04iQdkNVeS3M6VHkpTwsPSQfsFSwObtLVNy2Lf+ODwJRqCk2r C749hgKqBdJqkcIj49R7UP4SMQ/9V3yy8DFMrIcgsjC4tHwlQSCGeXNxTNlapGSa ke55LUR83FASryVJRbUs678SCZSFkyGcT0qLZ/olu/e7Jj2lB0Qy/SJawkrs9hPE 4QIDAQAB -----END PUBLIC KEY-----
Het voorvoegsel MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A is de rsaEncryption-algoritme-identificator; daaraan herken je een RSA-SPKI-sleutel in één oogopslag.
Publieke sleutel als JWK
Algoritme: Ed25519, JWK-paneel
{
"key_ops": [
"verify"
],
"ext": true,
"alg": "Ed25519",
"crv": "Ed25519",
"x": "V5uB7UaPJrtncx3SXNtNzn1ZXjF1ApwvzBZ8nFzT5eU",
"kty": "OKP"
} Dit is de export woordelijk, inclusief de velden key_ops en ext die Web Crypto er altijd bij zet. Een JWKS-vermelding wil die niet — verwijder ze allebei en voeg in plaats daarvan kid en use toe, zodat verifieerders tijdens een rotatie de juiste sleutel kunnen kiezen. Ed25519 komt terecht in het sleuteltype OKP; RSA-sleutels verschijnen als kty RSA met de velden n en e.
SHA-256-fingerprint
Algoritme: Ed25519
SHA256(SPKI) = KAXVxapxpG4zLsTVMpPafovT+X1NLWc8fsOXqtrb59o=
Een SHA-256-digest van de structuur van de publieke sleutel, kort genoeg om telefonisch voor te lezen. Let op: dit is niet de waarde die ssh-keygen toont — OpenSSH berekent de hash over zijn eigen wire-formaat, dus die twee komen voor dezelfde sleutel nooit overeen.
Zo gebruik je de RSA-sleutelgenerator
- 1
Kies het algoritme
RSA dekt het breedste scala aan oudere systemen. ECDSA geeft dezelfde sterkte in veel kortere sleutels. Ed25519 is de moderne standaard voor nieuw ondertekeningswerk.
- 2
Kies de sleutellengte
RSA 2048 voldoet aan de huidige richtlijnen; 3072 en 4096 geven marge voor sleutels die lang meegaan. ECDSA biedt P-256, P-384 en P-521. Ed25519 heeft één vaste maat.
- 3
Kies de PEM-structuur
PKCS#8 geeft BEGIN PRIVATE KEY en werkt vrijwel overal, ook in de JDK. Schakel alleen naar PKCS#1 wanneer iets uitdrukkelijk om BEGIN RSA PRIVATE KEY vraagt.
- 4
Kopieer of download beide helften
De privésleutel gaat naar je secrets manager. De publieke sleutel gaat naar wie jouw handtekeningen verifieert. Stuur de privéhelft nooit ergens heen.
- 5
Controleer de fingerprint
Vergelijk de SHA-256-fingerprint via een apart kanaal om te bevestigen dat de andere kant precies de publieke sleutel heeft geïnstalleerd die jij hebt gegenereerd.
Veelvoorkomende fouten met sleutelformaten
De publieke sleutel geplakt waar de privésleutel hoort
Ondertekenen vraagt om de privéhelft. Een bibliotheek die BEGIN PUBLIC KEY krijgt waar ze een privésleutel verwachtte, meldt meestal een nietszeggende verwerkingsfout in plaats van het echte probleem te benoemen.
-----BEGIN PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
Verkeerde PEM-structuur voor de bibliotheek
Slechts een paar ecosystemen lezen alleen de traditionele RSA-indeling — de -traditional-uitvoer van OpenSSL zelf, sommige SDK’s van betaalgateways, oudere Ruby- en Perl-tools. De meeste moderne bibliotheken, en de JDK in het bijzonder, verwachten PKCS#8. Zet de schakelaar voor de PEM-structuur om in plaats van naar een conversiecommando te zoeken.
-----BEGIN RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
De afsluitende regelovergang kwijtgeraakt
PEM-bestanden eindigen met een regelovergang na de laatste scheidingsregel. Kopiëren via een formulierveld dat witruimte weghaalt, levert een bestand op dat sommige parsers ronduit weigeren — en omdat het ontbrekende teken onzichtbaar is, ziet het bestand er in een editor correct uit.
-----END PRIVATE KEY-----[EOF]
-----END PRIVATE KEY-----↵[EOF]
Een teken onderweg kwijtgeraakt
Wat een PEM breekt is een verdwenen, ingevoegd of vervangen teken, niet de regelbreedte — de meeste parsers accepteren elke afbreking. Een kopie via een chatprogramma of een formulierveld kan een regelovergang stilletjes in een spatie veranderen, en base64 geeft geen enkele hint welk teken misging; de sleutel laadt gewoon niet. Gebruik de kopieerknop in plaats van met de hand te selecteren.
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuvUHLjyK9zje2aaNIni eSccN1uleXFRBb1g2TN6bk
Een HS256-secret gebruikt waar RS256 is ingesteld
HS256 neemt één gedeeld secret; RS256 neemt een sleutelpaar. Een willekeurige tekenreeks aan een RS256-ondertekenaar geven strandt al bij het inlezen. Genereer hier het paar, of gebruik onze JWT-secretgenerator als je HS256 bedoelde.
alg: RS256, key: 8f3a9c2e1b7d
alg: RS256, key: -----BEGIN PRIVATE KEY-----
Een PEM in authorized_keys geplakt
Een publieke SSH-sleutel is de eenregelige OpenSSH-vorm ssh-ed25519 AAAA…, geen PEM-blok, dus de publieke sleutel van deze pagina in authorized_keys plakken werkt niet. Bij een RSA-sleutel leid je de juiste regel lokaal af met ssh-keygen -y; voor SSH-toegang in het algemeen is genereren op de doelmachine nog beter.
-----BEGIN PUBLIC KEY-----
ssh-keygen -y -f rsa-2048-private.pem > id_rsa.pub
Wie gebruikt deze tool
- JWT's ondertekenen met RS256 of EdDSA
- Asymmetrische JWT-algoritmen hebben een sleutelpaar nodig in plaats van een gedeeld secret. Onderteken met de privésleutel, publiceer de publieke sleutel, en verifieerders hebben nooit iets in handen waarmee ze zelf tokens kunnen maken. Onze JWT-encoder accepteert de sleutels die deze pagina maakt.
- Webhooks en releases ondertekenen
- Publiceer de publieke sleutel één keer, onderteken elke payload met de privésleutel, en afnemers kunnen de echtheid controleren zonder gedeelde inloggegevens die kunnen lekken.
- Lokale ontwikkeling en tests
- Testsuites die handtekeningverificatie doorlopen, hebben een wegwerpsleutelpaar nodig. Er hier een genereren gaat sneller dan de OpenSSL-aanroep uit je hoofd opdiepen.
- Leren hoe een sleutelpaar eruitziet
- Naast elkaar wisselen tussen algoritmen en PEM-structuren maakt de verschillen concreet op een manier die het lezen van een specificatie niet doet.
- Een JWKS-endpoint voorbereiden
- De publieke JWK past rechtstreeks in een keys-array van een OpenID Connect-discoverydocument. Voeg een kid toe zodat verifieerders hem tijdens een rotatie kunnen kiezen, en houd de private JWK buiten dat bestand.
- Weg migreren van RSA
- Genereer de Ed25519-vervanger naast het RSA-origineel en vergelijk de groottes voordat je je aan de overstap vastlegt.
- Een verschil in formaat oplossen
- Wanneer een bibliotheek een sleutel met een verwerkingsfout weigert, is hem opnieuw uitgeven in de andere PEM-structuur meestal de hele oplossing.
PEM-formaten en hoe de generator werkt
- Welke container waar hoort
- Eén sleutel, vijf verpakkingen. De verkeerde kiezen is de meest voorkomende reden dat een sleutel wordt geweigerd, en de foutmelding is zelden specifieker dan een mislukte verwerking.
Om bestanden die je al hebt om te zetten, gaatContainer PEM-header Bevat Waar je hem tegenkomt PKCS#8 BEGIN PRIVATE KEY Elk algoritme Web Crypto, de JDK, Go, .NET — de meeste moderne bibliotheken PKCS#1 BEGIN RSA PRIVATE KEY Alleen RSA Traditionele OpenSSL-uitvoer, sommige betaalgateways, oudere Ruby- en Perl-tools SPKI / X.509 BEGIN PUBLIC KEY Elk algoritme, publieke helft De publieke sleutel die vrijwel elke bibliotheek verwacht PKCS#1 publiek BEGIN RSA PUBLIC KEY Alleen RSA, publieke helft Oudere RSA-tools JWK geen — het is JSON Elk algoritme JWKS-endpoints, OIDC-discovery, JOSE-bibliotheken openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pemde ene kant op enopenssl rsa -traditional -in pkcs8.pem -out pkcs1.pemde andere. - De willekeurigheid komt van het besturingssysteem
- Web Crypto voedt de sleutelgeneratie vanuit de entropiebron van het platform — getrandom op Linux, en de CSPRNG van het systeem op Windows en macOS. Het is dezelfde soort bron waaruit OpenSSL put, geen pseudowillekeurige generator in JavaScript.
- Genereren laat de pagina niet vastlopen
- crypto.subtle.generateKey is asynchroon, en in de grote browser-engines gebeurt het zoeken naar priemgetallen buiten de hoofdthread, dus de interface blijft reageren terwijl een modulus van 4096 bits wordt gevonden. Er verschijnt hoe dan ook een spinner, want hoe lang dat zoeken duurt hangt van geluk af.
- PKCS#8 omhult PKCS#1
- Een PKCS#8-PrivateKeyInfo bestaat uit een versienummer, een algoritme-identificator en een OCTET STRING. Bij een onversleutelde rsaEncryption-sleutel bevat die OCTET STRING een volledige PKCS#1-RSAPrivateKey, en precies zo zet deze pagina de twee naar elkaar om zonder iets opnieuw af te leiden.
- Publieke sleutels gebruiken SubjectPublicKeyInfo
- BEGIN PUBLIC KEY is een X.509-SubjectPublicKeyInfo: een algoritme-identificator plus een BIT STRING. Wat er in die bits zit hangt af van het algoritme — bij RSA is het een PKCS#1-RSAPublicKey, en daarom is BEGIN RSA PUBLIC KEY korter; bij ECDSA is het het ongecomprimeerde curvepunt en bij Ed25519 de kale sleutel van 32 bytes.
- De publieke exponent is 65537
- Elke RSA-sleutel hier gebruikt e = 65537, geschreven als 0x010001. Die is groot genoeg om aanvallen op kleine exponenten uit te sluiten en heeft maar twee gezette bits, zodat verificatie 16 kwadrateringen en één vermenigvuldiging kost.
- Fingerprints gaan over de DER, niet over de PEM
- De SHA-256-fingerprint gaat over de binaire SubjectPublicKeyInfo. Over de base64-tekst zou hij veranderen zodra de regelafbreking verandert. Lokaal komt dat neer op
openssl pkey -in private.pem -pubout -outform DER | openssl dgst -sha256 -binary | openssl base64.
Aanbevolen aanpak voor sleutelbeheer
- Genereer sleutels waar ze gebruikt worden
- Een privésleutel die over een netwerk reist, is aan elke tussenstap blootgesteld geweest. Genereren in de browser houdt de sleutel zelf van het netwerk af, al komt de code van de pagina er nog steeds overheen; genereren op de doelmachine haalt zelfs de kopieerstap weg. Voor een sleutel die productiesystemen beschermt, kies je de doelmachine.
- Kies Ed25519 tenzij iets RSA vereist
- Ed25519 geeft sterke beveiliging in een sleutel van 32 bytes, ondertekent snel en heeft geen parameters die je verkeerd kunt kiezen. Grijp naar RSA wanneer een tegenpartij of een oude bibliotheek je geen keuze laat.
- Behandel 2048 bits als ondergrens
- NIST SP 800-131A verbiedt RSA onder 2048 bits voor het maken van handtekeningen sinds 2013, en geen enkele publieke certificaatautoriteit geeft uit op een kleinere sleutel. Kies 3072 of 4096 voor sleutels die naar verwachting jarenlang in gebruik blijven.
- Zet nooit een privésleutel in versiebeheer
- Bewaar privésleutels in een secrets manager of in een omgevingsvariabele die je bij het starten inleest. Zodra een sleutel in een repository belandt, is vervangen het enige veilige antwoord.
- Roteer volgens schema, niet pas na een incident
- Publiceer nieuwe publieke sleutels met een sleutel-identificator voordat je de oude intrekt, zodat verifieerders er tijdens de overlap twee accepteren. Rotatie die je routineus oefent, is rotatie die het onder druk doet.
Veelgestelde vragen
Is het veilig om een privésleutel op een website te genereren?
Wat is het verschil tussen PKCS#8 en PKCS#1?
Hoe zet ik een PKCS#1-sleutel om naar PKCS#8, of terug?
Hoe haal ik de publieke sleutel uit een RSA-privésleutel?
Moet ik RSA of Ed25519 kiezen?
Is RSA met 2048 bits nog sterk genoeg?
Kan ik deze sleutels gebruiken om JWT's te ondertekenen?
Kan dit een SSH-sleutel genereren?
Kan ik de privésleutel met een wachtwoordzin beschermen?
Waar dient de fingerprint voor?
Gerelateerde tools
Alle tools bekijken →AES-ontsleutelingstool — OpenSSL- & CryptoJS-compatibel
Beveiligingstools
Ontsleutel AES online — GCM/CBC/CTR, wachtwoordzin of ruwe sleutel, detecteert automatisch het OpenSSL- & CryptoJS-formaat "U2FsdGVkX1". 100% in de browser, sleutels verlaten de pagina nooit.
AES-versleutelingstool — GCM, CBC & CTR
Beveiligingstools
Gratis AES-versleuteling online — AES-128/192/256, GCM/CBC/CTR, wachtwoordzin (PBKDF2) of ruwe sleutel. Draait 100% in je browser; niets wordt geüpload.
Bcrypt-hashgenerator & -verifier
Beveiligingstools
Genereer en verifieer bcrypt-wachtwoordhashes online — instelbare kostenfactor, $2b$/$2a$/$2y$-prefixes. 100% in je browser; je wachtwoord wordt nooit geüpload.
HMAC-generator en handtekeningverificatie
Beveiligingstools
Gratis online HMAC-generator en -verificator. Bereken HMAC-SHA256/SHA1/SHA384/SHA512 met sleutels in Tekst, Hex of Base64 en Hex/Base64/Base64URL-uitvoer. 100% in je browser — sleutels verlaten nooit de pagina.
JWT decoderen — online JWT-decoder
Beveiligingstools
Decodeer JWT-tokens direct in je browser. Inspecteer header, payload, signature, vervaldatum en claims. 100% privé — je token verlaat je apparaat nooit.
JWT-encoder & generator
Beveiligingstools
Gratis online JWT-generator & encoder. Bouw de header en payload en onderteken direct met HS256, RS256 of ES256. 100% in de browser — je secret en sleutel verlaten je apparaat nooit.