Gegevensencryptie en hashing
Leer gevoelige gegevens in rust en tijdens transport te versleutelen en geschikte hashingtechnieken voor gebruikerswachtwoorden te gebruiken.
Gegevensencryptie en hashing is een gratis Bootcamp backendontwikkeling met Node.js-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Bootcamp backendontwikkeling met Node.js. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Bootcamp backendontwikkeling met Node.js bevat in totaal 4 lessen.
Essentiële gegevensbeveiliging
Welkom bij gegevensversleuteling en hashing! In de digitale wereld van vandaag is het van het grootste belang om gevoelige informatie te beschermen. Of het nu gaat om gebruikerswachtwoorden, persoonlijke gegevens of financiële informatie: het beveiligen van deze gegevens is een kerntaak van elke ontwikkelaar.
In deze les leer je hoe je robuuste strategieën voor gegevensbescherming implementeert in je Node.js-applicaties. Je krijgt daarvoor de benodigde kennis en hulpmiddelen.

Versleuteling versus hashing
Voordat we de technieken bespreken, bekijken we twee fundamentele concepten:
- Versleuteling: Een tweerichtingsproces waarbij gegevens (platte tekst) met behulp van een sleutel worden omgezet in een onleesbaar formaat (cijfertekst). Dit proces is omkeerbaar: met de juiste sleutel kun je de cijfertekst weer omzetten naar platte tekst.
- Hashing: Een eenrichtingsproces waarbij gegevens van elke grootte worden omgezet in een tekenreeks met een vaste lengte (een hashwaarde of digest). Dit proces is onomkeerbaar; je kunt de oorspronkelijke gegevens niet uit de hash terughalen.
Ze hebben verschillende toepassingen!
Symmetrische versleuteling
Bij symmetrische versleuteling wordt dezelfde geheime sleutel gebruikt voor het versleutelen en ontsleutelen van gegevens. Dit is snel en efficiënt, waardoor het geschikt is voor het versleutelen van grote hoeveelheden gegevens.
Veelgebruikte algoritmen zijn onder andere AES (Advanced Encryption Standard). De sleutel moet geheim blijven en veilig tussen de partijen worden uitgewisseld.
Symmetrische versleuteling in Node.js
Met de ingebouwde module crypto van Node.js kunnen we symmetrische versleuteling uitvoeren. Hier zie je een voorbeeld met AES-256-CBC, een sterk symmetrisch algoritme.
Opmerking: In een echte applicatie moet de versleutelingssleutel veilig worden gegenereerd en opgeslagen, bijvoorbeeld in omgevingsvariabelen. De IV moet voor elke versleuteling willekeurig zijn.
const crypto = require('crypto');
// IMPORTANT: In production, generate this key securely and store it safely!
const ENCRYPTION_KEY = 'averysecretkeyforencryption123456'; // Must be 32 bytes for AES-256
const IV_LENGTH = 16; // For AES-256-CBC, IV is 16 bytes
function encrypt(text) {
const iv = crypto.randomBytes(IV_LENGTH);
const cipher = crypto.createCipheriv(
'aes-256-cbc',
Buffer.from(ENCRYPTION_KEY, 'utf8'),
iv
);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
// Store IV with encrypted data (e.g., as 'iv:encryptedData')
return iv.toString('hex') + ':' + encrypted;
}
function decrypt(text) {
const textParts = text.split(':');
const iv = Buffer.from(textParts.shift(), 'hex');
const encryptedText = textParts.join(':');
const decipher = crypto.createDecipheriv(
'aes-256-cbc',
Buffer.from(ENCRYPTION_KEY, 'utf8'),
iv
);
let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
const message = 'Sensitive data for storage.';
console.log('Original:', message);
const encryptedMessage = encrypt(message);
console.log('Encrypted:', encryptedMessage);
const decryptedMessage = decrypt(encryptedMessage);
console.log('Decrypted:', decryptedMessage);Asymmetrische versleuteling
Bij asymmetrische versleuteling, ook wel public-keycryptografie genoemd, wordt een sleutelpaar gebruikt: een publieke sleutel en een privésleutel.
- Publieke sleutel: Kan met iedereen worden gedeeld. Wordt gebruikt voor versleuteling.
- Privésleutel: Moet geheim blijven. Wordt gebruikt voor ontsleuteling.
Als je gegevens versleutelt met de publieke sleutel van iemand anders, kan alleen die persoon ze ontsleutelen met de bijbehorende privésleutel. Dit is trager dan symmetrische versleuteling, maar essentieel voor veilige communicatie en digitale handtekeningen.
Hashing voor wachtwoorden
Wanneer je gebruikerswachtwoorden opslaat, versleutel ze NOOIT. Hash ze in plaats daarvan altijd. Als een aanvaller toegang krijgt tot je database, zou die idealiter alleen onomkeerbare hashes moeten aantreffen en geen wachtwoorden die kunnen worden ontsleuteld.
Een goed hashingalgoritme voor wachtwoorden moet:
- Eenrichtingsverkeer zijn: Het moet onmogelijk zijn om de hash terug te draaien.
- Bestand zijn tegen botsingen: Het moet uiterst onwaarschijnlijk zijn dat twee verschillende invoerwaarden dezelfde hash opleveren.
- Langzaam zijn: Het moet bewust rekenintensief zijn ontworpen om brute-force-aanvallen te ontmoedigen.
Wachtwoorden salten
Om de beveiliging van wachtwoorden verder te verbeteren, gebruiken we salts. Een salt is een unieke, willekeurige tekenreeks die vóór het hashen aan een wachtwoord wordt toegevoegd.
Waarom gebruiken we salts?
- Voorkomt aanvallen met rainbow tables: Zonder salts zouden aanvallers vooraf hashes voor veelvoorkomende wachtwoorden kunnen berekenen (rainbow tables).
- Unieke hashes: Zelfs als twee gebruikers hetzelfde wachtwoord hebben, zijn hun hashes met salt verschillend.
De salt wordt meestal naast de hash opgeslagen.
Bcrypt voor het hashen van wachtwoorden
bcrypt is een veelgebruikte, aanbevolen bibliotheek voor het hashen van wachtwoorden in Node.js, omdat deze bewust langzaam is ontworpen en automatisch salts gebruikt.
De bibliotheek genereert een unieke salt en voert meerdere hashrondes uit. Het aantal rondes wordt bepaald door saltRounds, een werkfactor, waardoor brute-force-aanvallen moeilijker worden.
const bcrypt = require('bcrypt');
async function runBcryptExample() {
const password = 'mySecretPassword123';
const saltRounds = 10; // A higher number means more processing time
console.log('Original Password:', password);
// Hash the password with a generated salt
const hashedPassword = await bcrypt.hash(password, saltRounds);
console.log('Hashed Password:', hashedPassword);
// Compare a candidate password with the stored hash
const isMatch = await bcrypt.compare(password, hashedPassword);
console.log('Password Match (correct):', isMatch);
const wrongPassword = 'wrongPassword';
const isWrongMatch = await bcrypt.compare(wrongPassword, hashedPassword);
console.log('Password Match (wrong):', isWrongMatch);
}
runBcryptExample();Gegevens tijdens transport beveiligen (TLS/SSL)
Hoewel versleuteling en hashing gegevens in rust beschermen (gegevens die in een database zijn opgeslagen), is het net zo belangrijk om gegevens te beschermen terwijl ze tussen systemen worden verplaatst (gegevens tijdens transport).
De protocollen TLS/SSL (Transport Layer Security/Secure Sockets Layer) versleutelen netwerkcommunicatie. Wanneer je een website bezoekt via HTTPS, gebruiken je browser en de server TLS/SSL om alle uitgewisselde gegevens te versleutelen en zo afluisteren en manipulatie te voorkomen.
Controleer je begrip
Welke van de volgende uitspraken over versleuteling en hashing zijn WAAR?
Samenvatting: gegevensbescherming
Goed gedaan! Je hebt de basisprincipes van gegevensversleuteling en hashing geleerd:
- Versleuteling beschermt gevoelige gegevens en kan met een sleutel ongedaan worden gemaakt.
- Hashing zorgt voor een eenrichtingsomzetting en is ideaal voor het opslaan van wachtwoorden en het waarborgen van gegevensintegriteit.
- Symmetrische versleuteling gebruikt één sleutel, terwijl asymmetrische versleuteling openbare en privésleutels gebruikt.
- Gebruik altijd sterke hashing met salt, zoals bcrypt, voor wachtwoorden.
- TLS/SSL beveiligt gegevens die via netwerken worden verzonden.
Het toepassen van deze werkwijzen is essentieel voor het bouwen van veilige Node.js-applicaties!
Leer JavaScript met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 22
- Lessen
- 92
Veelgestelde vragen
Is de les “Gegevensencryptie en hashing” gratis?
Ja — de volledige tekst van “Gegevensencryptie en hashing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Bootcamp backendontwikkeling met Node.js wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Bootcamp backendontwikkeling met Node.js bevat in totaal 4 lessen.
Wat leer ik in “Gegevensencryptie en hashing”?
Leer gevoelige gegevens in rust en tijdens transport te versleutelen en geschikte hashingtechnieken voor gebruikerswachtwoorden te gebruiken. Je oefent met Bootcamp backendontwikkeling met Node.js door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Bootcamp backendontwikkeling met Node.js te beginnen?
Ervaring vooraf is niet nodig. Bootcamp backendontwikkeling met Node.js op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Gegevensencryptie en hashing”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Bootcamp backendontwikkeling met Node.js?
Ja. Elke les over Bootcamp backendontwikkeling met Node.js bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- OWASP Top 10 begrijpen
- Veilig programmeren in Node.js
- Gegevensencryptie en hashing
- Rate limiting en bescherming tegen brute force