randomBytes
- Node.js kursu
- Orta seviye
- Ders 102/116
- 5 dk
crypto.randomBytes ile rastgele bayt öğrenirsin.
randomBytes
Kriptografik olarak güvenli rastgele bayt üretmek için crypto.randomBytes(n) kullanırsın. Math.random'dan farklı olarak tahmin edilemez; bu yüzden parola sıfırlama belirteci (token) veya oturum kimliği üretmek için uygundur.
Örnek: crypto.randomBytes(16).toString("hex") 16 baytlık rastgele veriyi 32 karakterlik onaltılık dizeye çevirir. Her bayt iki hex karaktere karşılık gelir. randomBytes(8) 8 bayt verir; toString("hex") 16 karakter verir. toString("base64") daha kısa dize verir. Bir belirteç için en az 16 bayt (128 bit) önerilir; bu, çarpışma (collision) riskini küçültür. randomBytes eşzamanlıdır (sync); eşzamansız sürüm randomBytes(n, callback) biçimindedir.
Kullanım alanları
randomBytes'in yaygın kullanımları: parola sıfırlama belirteci (token), oturum kimliği (session id), tuz (salt) ve API anahtarı üretimi. Bu değerlerin tahmin edilemez olması kritiktir.
Örnek belirteç: const token = crypto.randomBytes(16).toString("hex");. 32 karakterlik bir dize verir; bir URL'de güvenle taşınır. Tuz için: const salt = crypto.randomBytes(8).toString("hex");. Tuz, parola hash'ine eklenen rastgele veridir; aynı parolanın hash'ini farklı yapar. Bu, gökkuşağı tablosu (rainbow table) saldırılarını engeller. Üretimde (production) belirteçleri veritabanına kaydedip süreleri (expiry) tutarsın; süresi dolan belirteçler reddedilir.
Uygulama Rastgele belirteç üret
const crypto = require("node:crypto"); ile içe aktar. const token = crypto.randomBytes(4).toString("hex"); ile 4 baytlık belirteç üret. console.log("Bayt uzunluğu: " + token.length) ile uzunluğu yazdır.
Başlangıç kodu
// crypto modülünü içe aktar
// buraya yaz
// 4 baytlık belirteç üret
// buraya yaz
// "Bayt uzunluğu: ..." yazdır
// buraya yazÖrnek çözüm
const crypto = require("node:crypto");
const token = crypto.randomBytes(4).toString("hex");
console.log("Bayt uzunluğu: " + token.length);Beklenen çıktı
Bayt uzunluğu: 8
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
randomBytes(16) |
16 rastgele bayt |
toString("hex") |
Onaltılık dize |
toString("base64") |
Kısa dize |
Math.random |
Tahmin edilebilir |
2 randomBytes(4).toString("hex") kaç karakter verir?
crypto.randomBytes(4).toString("hex")- 4
- 16
- 8 Doğru cevap
- 2
Açıklama: Her bayt iki hex karaktere karşılık gelir.
3 randomBytes çağrısını tamamla
const token = crypto.____(16).toString("hex");
const token = crypto.randomBytes(16).toString("hex");
Açıklama: randomBytes(16) 16 rastgele bayt üretir.