CodeBlanks Logo Icon CodeBlanks

AES

crypto.createCipheriv ile AES şifreleme öğrenirsin.

AES şifreleme

AES (Advanced Encryption Standard) iki yönlü simetrik şifrelemedir. Aynı anahtar hem şifreleme hem çözme için kullanılır. Node.js'te crypto.createCipheriv(algoritma, anahtar, iv) ile şifreleyici yaratırsın.

Örnek: const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);. Burada key 32 bayt (256 bit), iv 16 bayt (başlangıç vektörü) olmalıdır. iv her şifreleme için farklı olmalıdır; crypto.randomBytes(16) ile üretirsin. Şifreleme: cipher.update("metin", "utf8", "hex") ve cipher.final("hex"). Çözme: crypto.createDecipheriv ile aynı anahtar ve iv kullanılır. AES-CBC modunda şifreli metin blok boyutunun (16 bayt) katıdır; PKCS7 dolgu (padding) uygulanır. Anahtar ve iv birlikte güvenle saklanmalı veya iletilmelidir.

Anahtar ve IV

AES-256-CBC için anahtar 32 bayt, IV 16 bayt olmalıdır. IV her şifreleme için benzersiz olmalıdır; aynı anahtar ve IV ile aynı metin aynı şifreliyi verir. Bu, tekrar oynatma (replay) saldırılarına açık olur.

Örnek: const key = crypto.randomBytes(32); const iv = crypto.randomBytes(16);. Anahtar uzun süre kullanılır; güvenli bir yerde saklanır. IV ise her şifreleme için yeniden üretilir; şifreli metinle birlikte gönderilir (gizli tutulması gerekmez). Çözerken aynı IV gerekir: crypto.createDecipheriv("aes-256-cbc", key, iv). Anahtar bayt dizisi (Buffer) olmalıdır; dize olamaz. randomBytes zaten Buffer döndürür. Yanlış anahtar veya IV ile çözme hatası fırlatır; bu, yanlış veri girildiğinin göstergesidir.

Uygulama Metni AES ile şifrele

const crypto = require("node:crypto"); ile içe aktar. const key = crypto.randomBytes(32); ve const iv = crypto.randomBytes(16); ile anahtar ve IV üret. const cipher = crypto.createCipheriv("aes-256-cbc", key, iv); ile şifreleyici yarat. let enc = cipher.update("gizli", "utf8", "hex"); enc += cipher.final("hex"); ile şifrele. console.log("Şifreli uzunluk: " + enc.length) ile yazdır.

Başlangıç kodu

index.js
// crypto modülünü içe aktar
// buraya yaz

// anahtar ve IV üret
// buraya yaz

// şifreleyici yarat
// buraya yaz

// "gizli" metnini şifrele
// buraya yaz

// "Şifreli uzunluk: ..." yazdır
// buraya yaz

Örnek çözüm

index.js
const crypto = require("node:crypto");
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let enc = cipher.update("gizli", "utf8", "hex");
enc += cipher.final("hex");
console.log("Şifreli uzunluk: " + enc.length);

Beklenen çıktı

Şifreli uzunluk: 32

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 createCipheriv çağrısını tamamla

Soru
const cipher = crypto.____("aes-256-cbc", key, iv);
Cevap
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);

Açıklama: createCipheriv AES şifreleyici yaratır.

2 createCipheriv hangi üç parametreyi alır?

index.js
crypto.createCipheriv(alg, key, iv)
  • algoritma, metin, anahtar
  • algoritma, anahtar, IV Doğru cevap
  • algoritma, IV, metin
  • anahtar, IV, metin

Açıklama: algoritma, anahtar ve IV olmak üzere üç parametre alır.

3 Parçayı rolüne eşle

Kavram Anlamı
createCipheriv Şifreleyici yaratır
key 32 bayt anahtar
iv 16 bayt başlangıç vektörü
update/final Şifreli metni üretir

Orta seviye bölümündeki tüm dersler