Javascript İle Dinamik Bir Parola Oluşturucu Uygulaması Nasıl Yapılır?

Javascript İle Dinamik Bir Parola Oluşturucu Uygulaması Nasıl Yapılır?
Javascript İle Dinamik Bir Parola Oluşturucu Uygulaması Nasıl Yapılır?

JavaScript ile Dinamik Bir Parola Oluşturucu Uygulaması Nasıl Yapılır?

Günümüz dijital dünyasında kullanıcı güvenliğini sağlamanın en temel yolu güçlü ve tahmin edilemez parolalar kullanmaktır. Bir yazılım geliştirici olarak, kullanıcılarınıza kendi güvenli parolalarını oluşturmaları için araçlar sunmak, uygulamanızın profesyonellik seviyesini artırır. Bu rehberde, modern JavaScript sözdizimini kullanarak, tarayıcı tabanlı, özelleştirilebilir ve dinamik bir parola oluşturucu uygulamasının nasıl geliştirileceğini adım adım inceleyeceğiz.

Bu makale, temel düzeyde JavaScript bilgisine sahip olan ve web projelerinde güvenlik odaklı araçlar geliştirmek isteyen geliştiriciler için hazırlanmıştır. Uygulama sonunda, karakter uzunluğu, özel karakter kullanımı ve sayısal değerler gibi parametreleri kontrol edebilen, modern ve performanslı bir parola oluşturucuya sahip olacaksınız.

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce bilgisayarınızda modern bir web tarayıcısı (Chrome, Firefox veya Edge) ve temel bir kod editörü (VS Code önerilir) bulunması yeterlidir. JavaScript'in güncel standartlarını (ES6 ve sonrası) kullanacağımız için herhangi bir ek kütüphaneye veya sunucu tarafı kurulumuna ihtiyaç duymayacaksınız.

  • HTML5: Arayüz elemanlarını oluşturmak için.
  • CSS3: Tasarımı düzenlemek ve kullanıcı deneyimini iyileştirmek için.
  • JavaScript (ES2026 standartları): Mantıksal işlemleri ve parola üretimini gerçekleştirmek için.

Adım 1: HTML Arayüzünün Oluşturulması

Parola oluşturucu uygulamamızın temelini HTML ile atıyoruz. Kullanıcının parola uzunluğunu belirleyebileceği bir "range" (aralık) girişi, özel karakterler için onay kutuları ve sonucu gösterecek bir alan oluşturmamız gerekiyor.

Güvenli Parola Oluşturucu

Uzunluk: 16
Büyük Harf Sayılar Semboller
Parola Oluştur

Bu yapıda, kullanıcı etkileşimlerini yakalamak için ID değerlerini benzersiz olarak tanımladık. readonly özelliği, kullanıcının üretilen parolayı manuel olarak değiştirmesini engeller.

Adım 2: Karakter Setlerinin Tanımlanması

Parola oluştururken kullanacağımız karakter gruplarını JavaScript tarafında değişkenler olarak saklamalıyız. Bu, kodun okunabilirliğini artırır ve gelecekte yeni karakter setleri eklemeyi kolaylaştırır.

const upperSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lowerSet = "abcdefghijklmnopqrstuvwxyz";
const numberSet = "0123456789";
const symbolSet = "!@#$%^&*()_+~`|}{[]:;?.,-/=";

Bu değişkenler, rastgele seçim yapacağımız havuzları temsil eder. Güvenlik açısından, bu karakter setlerini sabit tutmak ve çalışma zamanında değiştirmemek iyi bir pratiktir.

Adım 3: Rastgele Karakter Seçim Mantığı

Parola oluşturucunun kalbi, seçilen karakter havuzundan rastgele bir karakter çeken fonksiyondur. Burada Math.random() fonksiyonunu kullanacağız. Ancak, kriptografik olarak daha güvenli sonuçlar için crypto.getRandomValues() kullanımı modern standartlarda daha çok tercih edilir.

const getRandomData = (dataSet) => {
    return dataSet[Math.floor(Math.random() * dataSet.length)];
}

Bu basit fonksiyon, kendisine gönderilen string içerisinden rastgele bir indeks seçer ve o karakteri döndürür. Bu, parola oluşturma döngümüzün temel yapı taşıdır.

Adım 4: Parola Oluşturma Fonksiyonunun Yazılması

Şimdi tüm parçaları birleştiren ana fonksiyonu yazalım. Bu fonksiyon, kullanıcının seçtiği ayarlara göre bir parola dizisi oluşturur.

const generatePassword = (password = "") => {
    if (upperInput.checked) password += getRandomData(upperSet);
    if (numberInput.checked) password += getRandomData(numberSet);
    if (symbolInput.checked) password += getRandomData(symbolSet);
    
    if (password.length < lengthInput.value) {
        return generatePassword(password);
    }
    
    passwordDisplay.value = password.substring(0, lengthInput.value);
}

Bu kodda özyinelemeli (recursive) bir yapı kullandık. Eğer parola uzunluğu hedeflenen uzunluğa ulaşmadıysa, fonksiyon kendisini tekrar çağırarak eksik karakterleri tamamlar.

Adım 5: Olay Dinleyicileri ve Etkileşim

Son adımda, "Parola Oluştur" butonuna tıklandığında fonksiyonun çalışmasını sağlayacak olan olay dinleyiciyi (event listener) ekliyoruz.

document.getElementById("generateBtn").addEventListener("click", function() {
    generatePassword();
});

Bu kod, kullanıcı butona her bastığında yeni bir parola üretilmesini tetikler. Test etmek için tarayıcınızda konsolu açarak herhangi bir hata olup olmadığını kontrol edebilirsiniz.

Parola Üretim Yöntemlerinin Karşılaştırılması

Yöntem Avantajı Dezavantajı
Math.random() Hızlı ve basit uygulama. Kriptografik olarak zayıf.
Crypto API Yüksek güvenlik, tahmin edilemez. Daha karmaşık sözdizimi.
Kritik Güvenlik Uyarısı: Tarayıcı tabanlı parola oluşturucular, kullanıcının kendi yerel cihazında çalışır. Ancak, üretilen parolaların sunucuya gönderilmemesi veya tarayıcı geçmişinde saklanmaması gerekir. Üretim ortamında (production) her zaman crypto.getRandomValues() kullanmanızı öneririm.

Sıkça Sorulan Sorular

Neden Math.random() yerine Crypto API tercih etmeliyim?

Math.random() tahmin edilebilir bir algoritma kullanır. Kriptografik anahtarlar veya hassas parolalar için window.crypto.getRandomValues() çok daha yüksek bir entropi (rastgelelik) sağlar.

Parolayı panoya kopyalama özelliğini nasıl eklerim?

navigator.clipboard.writeText(passwordDisplay.value) komutunu kullanarak, bir kopyalama butonu ile kullanıcının parolayı tek tıkla kopyalamasını sağlayabilirsiniz.

Bu uygulama mobil cihazlarda çalışır mı?

Evet, kullandığımız HTML ve JavaScript yapısı tamamen duyarlı (responsive) tasarıma uygundur. CSS ile mobil uyumlu hale getirmek yeterlidir.

Parola uzunluğu neden 8-64 arası sınırlandırıldı?

8 karakter günümüz güvenlik standartları için alt sınırdır. 64 karakter ise çoğu web sitesinin kabul ettiği maksimum parola uzunluğudur.

Kodda hata alırsam nasıl debug yapabilirim?

Tarayıcınızın "Geliştirici Araçları" (F12) içerisindeki "Console" sekmesini kullanarak değişkenlerin değerlerini console.log() ile izleyebilirsiniz.

Uygulamanın Performans Optimizasyonu ve Kod Kalitesi

Parola oluşturucu uygulamanızın performansını artırmak ve kodunuzu daha sürdürülebilir hale getirmek için bazı modern JavaScript pratiklerini uygulayabilirsiniz. Özellikle DOM manipülasyonlarını minimize etmek ve fonksiyonları daha modüler hale getirmek, uygulamanızın ölçeklenebilirliğini doğrudan etkiler.

DOM Erişimlerini Önbelleğe Alma

Her parola oluşturma işleminde document.getElementById veya querySelector kullanmak, tarayıcıyı gereksiz yere yorar. Bunun yerine, uygulama başladığında öğeleri değişkenlere atayarak bellekten okuma yapabilirsiniz.


// Yanlış: Her tıklamada DOM'u tarar
function generate() {
    const length = document.getElementById('length').value;
    // ...
}

// Doğru: DOM öğelerini bir kez önbelleğe al
const lengthInput = document.getElementById('length');
const generateBtn = document.getElementById('generate');

generateBtn.addEventListener('click', () => {
    const length = lengthInput.value;
    // ...
});

Fonksiyonel Programlama ve Modülerlik

Uygulamanızı daha profesyonel hale getirmek için parola oluşturma mantığını UI (arayüz) mantığından ayırın. Bu sayede parola üretme fonksiyonunuzu başka projelerde de kolayca kullanabilirsiniz.


const PasswordGenerator = {
    getRandomChar: (set) => set[Math.floor(Math.random() * set.length)],
    
    generate: function(length, options) {
        let charset = "";
        if (options.upper) charset += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        if (options.lower) charset += "abcdefghijklmnopqrstuvwxyz";
        if (options.numbers) charset += "0123456789";
        
        let password = "";
        for (let i = 0; i < length; i++) {
            password += this.getRandomChar(charset);
        }
        return password;
    }
};

Uygulamanın Deployment (Canlıya Alma) Süreci

Geliştirdiğiniz bu aracı internet üzerinde yayınlamak oldukça basittir. Statik bir web projesi olduğu için herhangi bir sunucu tarafı (Node.js, PHP vb.) diline ihtiyaç duymazsınız. İşte izlemeniz gereken adımlar:

  1. Dosya Yapısını Düzenleyin: index.html, style.css ve script.js dosyalarınızın aynı klasörde olduğundan emin olun.
  2. GitHub Pages Kullanımı: Projenizi bir GitHub deposuna yükleyin. Ayarlar (Settings) sekmesinden "Pages" kısmına giderek "main" dalını seçin. Projeniz birkaç dakika içinde yayına girecektir.
  3. Netlify veya Vercel: Bu platformlar, sürükle-bırak yöntemiyle veya GitHub entegrasyonu ile uygulamanızı saniyeler içinde canlıya almanızı sağlar.
Profesyonel İpucu: Uygulamanızı yayına almadan önce mutlaka minification (kod sıkıştırma) araçlarını kullanın. Bu, JavaScript ve CSS dosyalarınızın boyutunu küçülterek sayfa yüklenme hızını artıracaktır.

Güvenlik İçin İleri Seviye İpuçları

Uygulamanızı daha güvenli hale getirmek için şu ek özellikleri düşünebilirsiniz:

  • Parola Gücü Göstergesi: Kullanıcıya oluşturulan parolanın "zayıf", "orta" veya "güçlü" olduğunu belirten bir renkli bar ekleyin.
  • Entropy Hesaplama: Parolanın tahmin edilebilirliğini matematiksel olarak hesaplayan bir algoritma entegre edin.
  • Karakter Çeşitliliği Zorunluluğu: Seçilen tüm karakter setlerinden en az birer tane bulunmasını garanti eden bir doğrulama döngüsü ekleyin.

Sonuç

Bu rehberde, JavaScript kullanarak dinamik ve güvenli bir parola oluşturucu uygulamasını adım adım nasıl inşa edeceğinizi öğrendiniz. Uygulamanızı bir sonraki seviyeye taşımak için "Parolayı Kopyala" butonu ekleyebilir veya CSS ile karanlık mod (dark mode) desteği getirebilirsiniz. Unutmayın, en iyi güvenlik aracı, kullanıcının karmaşık ve benzersiz parolalar oluşturmasına yardımcı olan araçtır.

Sorumluluk Reddi: Bu makalede paylaşılan kodlar eğitim amaçlıdır. Uygulamanızın gerçek dünya güvenliği için profesyonel güvenlik denetimlerinden geçmesi ve modern şifreleme kütüphaneleri kullanılması tavsiye edilir.
Bu yazıya tepkinizi paylaşın:
Kerem Aydın

Mutfağından bahçesine, yaşamın her alanında hızlı ve etkili çözüm rehberleri hazırlıyorum. Bilgi kirliliğinden uzak, doğrudan sonuca odaklanan içerikler üretiyorum.

Yorumlar (17)

17
okuyucu bu yazı hakkında yorum yaptı. Siz de deneyiminizi paylaşarak diğer okuyuculara yardımcı olabilirsiniz.
Kübra Çelik
Kübra Çelik 28 Temmuz 2026

CSS kısmını biraz daha detaylandırabilirmişiz sanki, buton tasarımı biraz cılız kalmış ama işlevsellik 10 numara.

Hakan Demir
Hakan Demir 29 Temmuz 2026

React kullanıyorsak state yapısını nasıl kurmamız gerekir? Bununla ilgili de bi yazı yazarmısın?

Kerem Aydın
Kerem Aydın 30 Temmuz 2026

Fikir için teşekkürler Hakan, React ile ilgili bir rehber hazırlığına başlayabilirim.

Oğuzhan K.
Oğuzhan K. 30 Temmuz 2026

Yazı gayet güzel ama keşke şifre gücünü ölçen bir bar da ekleseymişsin. O zaman tam olurdu.

Kerem Aydın
Kerem Aydın 31 Temmuz 2026

Çok haklısın, şifre gücü ölçer eklemek projeyi çok daha profesyonel kılacaktır. İleride bunu bir 'v2' olarak ekleyebilirim.

Zeynep Aslan
Zeynep Aslan 31 Temmuz 2026

Harika bir çalışma. İş yerindeki projemde işime yaradı valla, çok pratik oldu sağolasın.

Mertcan Öz
Mertcan Öz 01 Ağustos 2026

Güzel rehber olmuş. Şifrelerin içine özel karakter ekleme opsiyonunu da bir sonraki güncellemede ekleyebilirsin belki.

Kerem Aydın
Kerem Aydın 02 Ağustos 2026

Önerin için teşekkürler Mertcan, not aldım. Bir sonraki yazıda onu da dahil etmeyi planlıyorum.

Ayşegül Nur
Ayşegül Nur 02 Ağustos 2026

Bu şifre üreticiyi kendi portfolyo siteme ekliyorum hemen. Çok şık duruyor.

Selin G.
Selin G. 02 Ağustos 2026

Ya ben kodları kopyaladım ama çalışmadı, biyerde hata mı yapıyom acaba? Konsolda hata da vermiyo anlamadım.

Burak Soylu
Burak Soylu 04 Ağustos 2026

Script dosyasını HTML'in sonunda çağırdığından emin ol, bazen DOM yüklenmeden kod çalışmaya başlıyor ondan olabilir.

Deniz Vural
Deniz Vural 04 Ağustos 2026

Kodlar neden bu kadar karışık geldi bana ya? Daha basit yöntemleri yok mu bunun, kafam karıstı biraz.

Emre K.
Emre K. 05 Ağustos 2026

Bence gayet temiz yazılmış, mantığını anlarsan çok kolay aslında.

Caner Yılmaz
Caner Yılmaz 05 Ağustos 2026

Eline sağlık Kerem hocam, basit ve açıklayıcı olmuş. Özellikle Math.random() kısmındaki detayı hiç böyle düşünmemiştim.

Kerem Aydın
Kerem Aydın 06 Ağustos 2026

Güzel yorumun için teşekkürler Caner, güvenlik tarafında o detaya dikkat etmek gerçekten önemli.

Fatih Y.
Fatih Y. 05 Ağustos 2026

Baya yararlı bir içerik olmuş, eline sağlık. Parola kopyalama butonuna tıklandığında çıkan 'kopyalandı' uyarısı için hangi kütüphaneyi kullandın?

Kerem Aydın
Kerem Aydın 06 Ağustos 2026

Teşekkür ederim Fatih! Herhangi bir kütüphane kullanmadım, doğrudan 'navigator.clipboard' API'sini kullanarak çözdüm.

Yorum Yaz