Bootcamp i backendudvikling med Node.js · Lektion

Datakryptering og hashing

Lær at kryptere følsomme data både i hvile og under overførsel, og brug korrekte hashingteknikker til brugeradgangskoder.

Lektion 3 af 411 trin

Datakryptering og hashing er en gratis Bootcamp i backendudvikling med Node.js-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Bootcamp i backendudvikling med Node.js, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.

Det vigtigste om datasikkerhed

Velkommen til datakryptering og hashing! I dagens digitale verden er det afgørende at beskytte følsomme oplysninger. Uanset om det drejer sig om brugeradgangskoder, personlige data eller økonomiske oplysninger, er sikring af disse data et centralt ansvar for alle udviklere.

Denne lektion giver dig den viden og de værktøjer, du skal bruge til at implementere robuste strategier til databeskyttelse i dine Node.js-applikationer.

Datakryptering og hashing — illustration 1

Kryptering kontra hashing

Før vi ser nærmere på teknikkerne, skal vi forstå to grundlæggende begreber:

  • Kryptering: En tovejsproces, der omdanner data (klartekst) til et ulæseligt format (chiffertekst) ved hjælp af en nøgle. Processen kan vendes, hvilket betyder, at chifferteksten kan omdannes tilbage til klartekst med den korrekte nøgle.
  • Hashing: En envejsproces, der omdanner data af enhver størrelse til en streng med fast længde (en hashværdi eller et digest). Processen kan ikke vendes; du kan ikke genskabe de oprindelige data ud fra deres hash.

De har forskellige formål!

Symmetrisk kryptering

Symmetrisk kryptering bruger den samme hemmelige nøgle til både at kryptere og dekryptere data. Den er hurtig og effektiv og egner sig derfor til kryptering af store datamængder.

Almindelige algoritmer omfatter AES (Advanced Encryption Standard). Nøglen skal holdes hemmelig og udveksles sikkert mellem parterne.

Symmetrisk kryptering i Node.js

Node.js' indbyggede crypto-modul gør det muligt at udføre symmetrisk kryptering. Her er et eksempel med AES-256-CBC, en stærk symmetrisk algoritme.

Bemærk: I en rigtig applikation bør krypteringsnøglen genereres og gemmes sikkert (f.eks. i miljøvariabler), og IV'en bør være tilfældig ved 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å kaldet public-key-kryptografi, bruger et nøglepar: en offentlig nøgle og en privat nøgle.

  • Offentlig nøgle: Kan deles med alle. Bruges til kryptering.
  • Privat nøgle: Skal holdes hemmelig. Bruges til dekryptering.

Hvis du krypterer data med en andens offentlige nøgle, er det kun den pågældende, der kan dekryptere dem med sin private nøgle. Det er langsommere end symmetrisk kryptering, men afgørende for sikker kommunikation og digitale signaturer.

Hashing af adgangskoder

Når du gemmer brugeradgangskoder, må du ALDRIG kryptere dem. Hash dem altid i stedet. Hvis en angriber får adgang til din database, bør angriberen ideelt set kun finde hashes, der ikke kan vendes, og ikke adgangskoder, der kan dekrypteres.

En god hashingalgoritme til adgangskoder bør være:

  • Envejs: Umulig at vende.
  • Modstandsdygtig over for kollisioner: Det er ekstremt usandsynligt, at to forskellige input giver den samme hash.
  • Langsom: Bevidst designet til at være beregningstung for at gøre brute-force-angreb mindre effektive.

Salting af adgangskoder

For at styrke sikkerheden for adgangskoder yderligere bruger vi salts. Et salt er en unik, tilfældig streng, der føjes til en adgangskode, før den hashes.

Hvorfor bruge salts?

  • Forhindrer rainbow table-angreb: Uden salts kunne angribere på forhånd beregne hashes for almindelige adgangskoder (rainbow tables).
  • Unikke hashes: Selv hvis to brugere har den samme adgangskode, vil deres saltede hashes være forskellige.

Salt'et gemmes normalt sammen med hashværdien.

Bcrypt til hashing af adgangskoder

bcrypt er et almindeligt anbefalet bibliotek til hashing af adgangskoder i Node.js, fordi det er designet til at være langsomt og automatisk integrerer salting.

Det håndterer generering af et unikt salt og udfører flere runder hashing (styret af saltRounds, en arbejdsfaktor) for at gøre brute-force-angreb 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 af data under transport (TLS/SSL)

Selvom kryptering og hashing beskytter data i hvile (gemt i en database), er det lige så vigtigt at beskytte data, mens de bevæger sig mellem systemer (data under transport).

Protokollerne TLS/SSL (Transport Layer Security/Secure Sockets Layer) sørger for kryptering af netværkskommunikation. Når du besøger et websted via HTTPS, bruger din browser og serveren TLS/SSL til at kryptere alle udvekslede data, så aflytning og manipulation forhindres.

Kontroller din forståelse

Hvilke af følgende udsagn om kryptering og hashing er RIGTIGE?

Opsummering: Databeskyttelse

Godt gået! Du har lært det grundlæggende om datakryptering og hashing:

  • Kryptering beskytter følsomme data og kan vendes ved hjælp af en nøgle.
  • Hashing giver en envejsomdannelse, som er ideel til lagring af adgangskoder og sikring af dataintegritet.
  • Symmetrisk kryptering bruger én nøgle, mens asymmetrisk kryptering bruger par af offentlige og private nøgler.
  • Brug altid stærk, saltet hashing (som bcrypt) til adgangskoder.
  • TLS/SSL sikrer data under transport over netværk.

Det er afgørende at implementere disse metoder, når du bygger sikre Node.js-applikationer!

Gratis at komme i gang

Lær JavaScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
22
Lektioner
92

Ofte stillede spørgsmål

Er lektionen “Datakryptering og hashing” gratis?

Ja — hele teksten til “Datakryptering og hashing” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Bootcamp i backendudvikling med Node.js-kurset, skal du opgradere til CoddyKit PRO. Bootcamp i backendudvikling med Node.js-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Datakryptering og hashing”?

Lær at kryptere følsomme data både i hvile og under overførsel, og brug korrekte hashingteknikker til brugeradgangskoder. Du øver dig i Bootcamp i backendudvikling med Node.js med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Bootcamp i backendudvikling med Node.js?

Der kræves ingen tidligere erfaring. Bootcamp i backendudvikling med Node.js på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Datakryptering og hashing”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Bootcamp i backendudvikling med Node.js-lektion?

Ja. Alle Bootcamp i backendudvikling med Node.js-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Forstå OWASP Top 10
  2. Sikker kodning i Node.js
  3. Datakryptering og hashing
  4. Rate limiting og beskyttelse mod brute force
← Tilbage til Bootcamp i backendudvikling med Node.js