Datakryptering og hashing
Lær å kryptere sensitive data i ro og under overføring, og bruk riktige hashingteknikker for brukerpassord.
Datakryptering og hashing er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
Grunnleggende datasikkerhet
Velkommen til datakryptering og hashing! I dagens digitale verden er det avgjørende å beskytte sensitiv informasjon. Enten det gjelder brukerpassord, personopplysninger eller økonomiske detaljer, er sikring av disse dataene et grunnleggende ansvar for alle utviklere.
I denne leksjonen får du kunnskapen og verktøyene du trenger for å implementere robuste strategier for databeskyttelse i Node.js-applikasjonene dine.

Kryptering kontra hashing
Før vi går gjennom teknikkene, skal vi se nærmere på to grunnleggende konsepter:
- Kryptering: En toveisprosess som omformer data (klartekst) til et uleselig format (chiffertekst) ved hjelp av en nøkkel. Prosessen kan reverseres, noe som betyr at chifferteksten kan konverteres tilbake til klartekst med riktig nøkkel.
- Hashing: En enveisprosess som omformer data av vilkårlig størrelse til en tegnstreng med fast størrelse (en hashverdi eller digest). Prosessen kan ikke reverseres; du kan ikke hente de opprinnelige dataene fra hashen.
De har ulike formål!
Symmetrisk kryptering
Symmetrisk kryptering bruker den samme hemmelige nøkkelen til både kryptering og dekryptering av data. Den er rask og effektiv, og egner seg derfor til kryptering av store datamengder.
Vanlige algoritmer omfatter AES (Advanced Encryption Standard). Nøkkelen må holdes hemmelig og utveksles sikkert mellom partene.
Symmetrisk kryptering i Node.js
Node.js har en innebygd crypto-modul som gjør det mulig å utføre symmetrisk kryptering. Her er et eksempel med AES-256-CBC, en sterk symmetrisk algoritme.
Merk: I en ekte applikasjon bør krypteringsnøkkelen genereres og lagres på en sikker måte (for eksempel i miljøvariabler), og IV-en bør være tilfeldig for hver kryptering.
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);Asymmetrisk kryptering
Asymmetrisk kryptering, også kjent som offentlig-nøkkel-kryptografi, bruker et nøkkelpar: en offentlig nøkkel og en privat nøkkel.
- Offentlig nøkkel: Kan deles med hvem som helst. Brukes til kryptering.
- Privat nøkkel: Må holdes hemmelig. Brukes til dekryptering.
Hvis du krypterer data med den offentlige nøkkelen til en person, kan bare denne personen dekryptere dataene med sin private nøkkel. Dette er langsommere enn symmetrisk kryptering, men er avgjørende for sikker kommunikasjon og digitale signaturer.
Hashing av passord
Når du lagrer brukerpassord, skal du ALDRI kryptere dem. Hash dem alltid i stedet. Hvis en angriper får tilgang til databasen din, bør angriperen ideelt sett bare finne irreversible hasher, ikke passord som kan dekrypteres.
En god hashingalgoritme for passord bør være:
- Enveis: Umulig å reversere.
- Motstandsdyktig mot kollisjoner: Det skal være svært usannsynlig at to ulike inndata gir samme hash.
- Langsom: Bevisst utformet slik at den krever mye beregningskraft, for å gjøre brute-force-angrep vanskeligere.
Salting av passord
For å styrke passordsikkerheten ytterligere bruker vi salter. Et salt er en unik, tilfeldig streng som legges til et passord før det hashes.
Hvorfor bruker vi salter?
- Forhindrer rainbow table-angrep: Uten salter kan angripere forhåndsberegne hasher for vanlige passord (rainbow tables).
- Unike hasher: Selv om to brukere har samme passord, vil de saltede hashene deres være forskjellige.
Saltverdien lagres vanligvis sammen med hashen.
Bcrypt for hashing av passord
bcrypt er et mye anbefalt bibliotek for hashing av passord i Node.js fordi det er utformet for å være langsomt og automatisk håndterer salting.
Det håndterer generering av et unikt salt og utfører flere runder med hashing (styrt av saltRounds, en arbeidsfaktor) for å gjøre brute-force-angrep vanskeligere.
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();Sikring av data under overføring (TLS/SSL)
Mens kryptering og hashing beskytter data i hvile (lagret i en database), er det like viktig å beskytte data mens de overføres mellom systemer (data under overføring).
Protokollene TLS/SSL (Transport Layer Security/Secure Sockets Layer) sørger for kryptering av nettverkskommunikasjon. Når du besøker et nettsted som bruker HTTPS, bruker nettleseren og serveren TLS/SSL til å kryptere alle data som utveksles, og forhindrer avlytting og manipulering.
Test forståelsen din
Hvilke av følgende påstander om kryptering og hashing er SANNE?
Oppsummering: Databeskyttelse
Godt jobbet! Du har lært det grunnleggende om datakryptering og hashing:
- Kryptering beskytter sensitive data og kan reverseres ved hjelp av en nøkkel.
- Hashing gir enveisomforming og egner seg godt til lagring av passord og sikring av dataintegritet.
- Symmetrisk kryptering bruker én nøkkel, mens asymmetrisk kryptering bruker nøkkelpar med offentlig og privat nøkkel.
- Bruk alltid sterk, saltet hashing (for eksempel bcrypt) for passord.
- TLS/SSL sikrer data under overføring over nettverk.
Det er avgjørende å implementere disse metodene for å bygge sikre Node.js-applikasjoner!
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 22
- Leksjoner
- 92
Ofte stilte spørsmål
Er leksjonen «Datakryptering og hashing» gratis?
Ja – hele teksten i «Datakryptering og hashing» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.
Hva lærer jeg i «Datakryptering og hashing»?
Lær å kryptere sensitive data i ro og under overføring, og bruk riktige hashingteknikker for brukerpassord. Du øver på Bootcamp i backendutvikling med Node.js med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med Node.js?
Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Datakryptering og hashing»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med Node.js-leksjonen?
Ja. Alle Bootcamp i backendutvikling med Node.js-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Forstå OWASP Top 10
- Sikker koding i Node.js
- Datakryptering og hashing
- Begrensning av forespørselsrate og beskyttelse mot brute force