Yükleniyor...

Kriptografi

Node.js’de kriptografi, verilerin güvenliğini sağlamak için kullanılan temel bir teknolojidir. Kriptografi, veri gizliliğini, bütünlüğünü ve doğruluğunu garanti eder ve Node.js’in crypto modülü bu işlemleri yüksek performanslı ve etkin bir şekilde gerçekleştirmek için entegre edilmiştir. Özellikle web uygulamaları, mikro servisler ve dağıtık sistemlerde güvenli veri iletimi, parola koruması ve API güvenliği için kriptografi kritik bir rol oynar.
Node.js geliştiricileri, kriptografiyi şifreleme, çözme, hashing, dijital imza ve anahtar yönetimi gibi işlemlerde kullanabilir. Bu süreçte Node.js’in sözdizimi, veri yapıları, algoritmalar ve nesne yönelimli programlama prensipleri devreye girer. Bu eğitimde okuyucu, simetrik (AES) ve asimetrik (RSA) algoritmaların nasıl uygulanacağını, güvenli anahtar yönetimini, veri bütünlüğü doğrulamasını ve modern güvenlik standartlarını öğrenecek.
Öğrenci, kriptografiyi Node.js projelerinde gerçek dünyada nasıl uygulayacağını, performans optimizasyonunu ve hatasız kod yazma tekniklerini öğrenerek güvenli, ölçeklenebilir ve bakımı kolay uygulamalar geliştirmeyi hedefleyecek. Bu bağlamda kriptografi, yazılım geliştirme ve sistem mimarisi içerisinde güvenlik katmanı olarak konumlanır ve ileri düzey Node.js uygulamalarında kritik bir yetkinlik sağlar.

Temel Örnek

text
TEXT Code
const crypto = require('crypto');

const mesaj = 'Node.js Kriptografi Örneği';
const anahtar = crypto.randomBytes(32); // 256 bit
const iv = crypto.randomBytes(16); // Initialization Vector

function sifrele(metin) {
const cipher = crypto.createCipheriv('aes-256-cbc', anahtar, iv);
let sifrelenmis = cipher.update(metin, 'utf8', 'hex');
sifrelenmis += cipher.final('hex');
return sifrelenmis;
}

function cozumle(sifrelenmisMetin) {
const decipher = crypto.createDecipheriv('aes-256-cbc', anahtar, iv);
let cozulen = decipher.update(sifrelenmisMetin, 'hex', 'utf8');
cozulen += decipher.final('utf8');
return cozulen;
}

const sifreliMesaj = sifrele(mesaj);
const cozulenMesaj = cozumle(sifreliMesaj);

console.log('Orijinal Mesaj:', mesaj);
console.log('Şifreli Mesaj:', sifreliMesaj);
console.log('Çözülen Mesaj:', cozulenMesaj);

Bu temel örnekte Node.js’in crypto modülü kullanılarak AES-256-CBC algoritmasıyla simetrik şifreleme uygulanmıştır. crypto.randomBytes() fonksiyonu, rastgele ve güvenli bir anahtar ve IV üretmek için kullanılır. createCipheriv ve createDecipheriv fonksiyonları şifreleme ve çözme işlemlerini blok blok gerçekleştirir.
Şifreleme sürecinde metin önce UTF-8 formatından HEX formatına dönüştürülür, çözme sırasında ise tam tersi işlem yapılır. Bu örnek, Node.js’in buffer yönetimini ve veri kodlama yöntemlerini etkin bir şekilde kullanmayı gösterir. Gerçek dünya uygulamalarında bu yöntem, kullanıcı parolalarını veya hassas API verilerini güvenli bir şekilde saklamak için uygundur. Anahtar ve IV’in güvenli bir şekilde saklanması kritik öneme sahiptir; üretim ortamında bunun için güvenli anahtar yönetim sistemleri tercih edilmelidir.

Pratik Örnek

text
TEXT Code
const crypto = require('crypto');

class GuvenliDepo {
constructor(sifre) {
this.algoritma = 'aes-256-gcm';
this.anahtar = crypto.scryptSync(sifre, 'tuz', 32);
}

sifrele(veri) {
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv(this.algoritma, this.anahtar, iv);
let sifrelenmis = cipher.update(JSON.stringify(veri), 'utf8', 'hex');
sifrelenmis += cipher.final('hex');
const tag = cipher.getAuthTag().toString('hex');
return { iv: iv.toString('hex'), sifrelenmis, tag };
}

cozumle(obj) {
const decipher = crypto.createDecipheriv(
this.algoritma,
this.anahtar,
Buffer.from(obj.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(obj.tag, 'hex'));
let cozulen = decipher.update(obj.sifrelenmis, 'hex', 'utf8');
cozulen += decipher.final('utf8');
return JSON.parse(cozulen);
}
}

// Kullanım
const depo = new GuvenliDepo('GucluParola123!');
const kullaniciVeri = { id: 1, isim: 'admin', rol: 'yönetici' };

const sifreli = depo.sifrele(kullaniciVeri);
const cozulen = depo.cozumle(sifreli);

console.log('Şifreli Veri:', sifreli);
console.log('Çözülen Veri:', cozulen);

Bu pratik örnek, nesne yönelimli programlama kullanarak kriptografiyi uygulamayı gösterir. GuvenliDepo sınıfı şifreleme ve çözme işlemlerini kapsüller ve AES-256-GCM algoritması ile verinin bütünlüğünü Auth Tag ile doğrular. crypto.scryptSync() fonksiyonu güvenli bir anahtar türetir. Her şifreleme işlemi rastgele IV üretir; bu sayede tekrar kullanım durumları güvenlik riskini azaltır.
Bu model, mikro servisler ve API güvenliği için ideal bir yaklaşımdır. Tamamen modüler yapısı sayesinde kod bakımı kolaydır ve hata yönetimi try/catch ile güvenli şekilde yapılabilir. Performans açısından yoğun işlemler için crypto.promises kullanımı tavsiye edilir.

Node.js Kriptografi için en iyi uygulamalar ve yaygın hatalar:

  • Rastgele değerler için crypto.randomBytes() kullanın, Math.random() kullanmayın.
  • IV ve anahtarları tekrar kullanmaktan kaçının; her işlem için benzersiz olmalıdır.
  • Anahtar türetiminde scrypt veya pbkdf2 gibi güvenli fonksiyonlar kullanın.
  • Veri bütünlüğü doğrulaması için Auth Tag veya dijital imza kullanın.
  • Modern algoritmalar tercih edin: AES-256-GCM, RSA-2048, SHA-256; MD5 ve SHA-1 kaçının.
    Yaygın hatalar arasında buffer sızıntıları, hatalı çözme işlemleri ve anahtarların güvenli olmayan biçimde saklanması vardır. Debug için işlemleri sınıflara kapsüller ve try/catch kullanın. Performans için asenkron yöntemler (crypto.promises) ve veri akışlarını (streams) tercih edin.

📊 Referans Tablosu

Node.js Element/Concept Description Usage Example
crypto.createCipheriv Şifreleme nesnesi oluşturur crypto.createCipheriv('aes-256-cbc', key, iv)
crypto.createDecipheriv Çözme nesnesi oluşturur crypto.createDecipheriv('aes-256-cbc', key, iv)
crypto.scryptSync Paroladan güvenli anahtar türetir const key = crypto.scryptSync('parola', 'tuz', 32)
crypto.randomBytes Güvenli rastgele byte üretir const iv = crypto.randomBytes(16)
cipher.getAuthTag GCM doğrulama etiketi alır const tag = cipher.getAuthTag()
crypto.createHash Veri doğrulama için hash oluşturur crypto.createHash('sha256').update(data).digest('hex')

Kriptografi öğrenimi sonunda Node.js projelerinde veri güvenliğini sağlamak, bütünlük kontrolü yapmak ve güvenli anahtar yönetimi uygulamak mümkün hale gelir. Bu beceriler, web uygulamaları ve mikro servis mimarilerinde kritik güvenlik katmanları oluşturur.
Bir sonraki adım, dijital imzalar (RSA, ECDSA), JWT token oluşturma/validasyonu ve asimetrik şifreleme ile anahtar değişimi gibi ileri konulara odaklanmaktır. Üretim ortamlarında, AWS KMS veya HashiCorp Vault gibi güvenli anahtar yönetim sistemlerini kullanmak önerilir. Node.js kriptografi yetenekleri, güvenli ve ölçeklenebilir uygulamalar geliştirmek için temel bir araçtır.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek