Konu bayağı uzamış, yarısından sonra yüzeysel olarak baktım. Hashlayarak saklarsan şifreyi bulmaları için şifreyi bilmeleri gerekir. Brute force ile ve password list ile kırılabilir. Önlem olarak şifrenin başına veya sonuna bir de kendi verini eklemelisin. Örneğin şifre 123 ise sen hashlarken 123. siteadı-gizlibilgitokeni verisini hashlar ve çözünce de buna göre işlem yaparsın. Böylece passwordlist ile kırılamaz ve bruteforce ile kırılması da zorlaşır.

Hocam peki ben şunu merak ediyorum. MD5 gibi sistemlerde aynı hash'a 2 değer düşmesi ihtimali yok mu?

Aklıma bir fikir geldi, uygulayacağımdan değil de merak ettiğimden. Biz veritabanlarında şifreleri normal bir şekilde veya şifreleyip depoluyoruz ya şifreleri depolamak yerine onların hash verilerini depolasak nasıl olur? @Nizel G

MD5 deme nedenim zaten biraz kısa olmasıydı Tahminimce çıktının karakter uzunluğu arttıkça daha fazla güvenliliği artıyordur, ne de olsa ne kadar uzun çıktı o kadar fazla ihtimal demek, değil mi?

Çıktı uzunluğu çok önemli değil. Tabii çok kısa olması etkiler ama çıktı uzunluğu çok önemli değil. 64 bit bile milyarlarca ihtimal demek. Belki trilyonlarca ihtimal demek. Fakat asıl önemli olan algoritman. Algoritman sığ ve seed'in tekrar edilebilirse, şifreyi elde etmek o kadar kolay olur. Algoritma yeterli, seed tekrar edilebilirse, algoritma bilinmediği müddetçe elde etmek zorlaşır.

Hash değeri kullanacak olsam örnekte attığım gibi SHA512 falan kullanırım. Dediğiniz durum olur mu hiç araştırmadım ama @Alih001'in dediği gibi olabilir belki.

Ben bugüne kadar ne yaptığımı söyleyeyim: Her kullanıcı için veritabanı klasöründe ayrı bir dosya açıyordum. O dosyanın tamamını da AES256 ile kullanıcının şifresini kullanıp şifreliyordum, bu sayede evet verileri bizim veya başkasının okuması mümkün değildi ancak şifre de sıfırlanmıyordu "Parolamı unuttum" diye bir seçenek dahi yoktu yani

Sanırım doğru sayılabilir ancak hash algoritmalarının her biri sonuç olarak girdinin uzunluğuna bakmaksızın aynı uzunlukta bir sonuç üretir, yani girdinin uzunluğu pek önemli değil.

Zaten oyle yapmazsan verileri altin tepside sunarsin. JavaScript:Panoya kopyala import expressAsyncHandler from "express-async-handler"; import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; import User from "../modules/module. js" export const registerUser = expressAsyncHandler(async => { const = req. body; //Validation if //Check if user already exists const userExist = await User. findOne ; if //Hash password const salt = await bcrypt. genSalt(10); const hashedPassword = await bcrypt. hash ; //Create user const user = await User. create if { res. status(201). json( ) } else } ) Mesela bu benim onceden yazdigim bir authService. Orada yeni gelen kullanici datasini MongoDB veritabaninda yerlestiriyorum. Bu sirada da "bcrypt" kutuphanesiyle sifresiz parolami salt + hashleme ile kaydediyorum. Mongo veritabanimda mesela "admin123" degil de ona denk gelen uretilmis bir hash degeri tutuluyor: JavaScript:Panoya kopyala { "name": "NewUser", "email": " ", "password": "$2a$10$VxkVt722KCZexAZhwSO. TetPHVtGH35N4ie5j/IF/hqwpZEpjtuSu", "isAdmin": false, "createdAt": , "updatedAt": , " v": 0 } Yukarida gosterdigim Express kod parcasinda module gonderilen "password" databaseda sifrelenmis olarak tutuluyor.

Var. Buna hash collision deniliyor. Bir hash algoritmasının güvenilirliği de buna bağlı işte. Amaç olabildiğince hash collision durumunu azaltmak. Hatta MD5 de tam olarak bu nedenden dolayı güvenilir değil.

Tokenler konusunda katılıyorum, tokenleri kullanmam gerek.

Hangi DB kullandigini bilmiyorum ama tablo formatinda yerlestirmen ve salting+ hashing uyglumanan daha saglikli. Session icin ise direkt DB'den parolayi kullanmak yerine, JSON Web Token ile session yonetimi yapman daha iyi olur. Ama sifirlanma problemini anlayamadim.

Linux'ta oturum açma şekli bu mantıkla çalışıyor. Kullanıcının oluşturduğu şifre Hashlenerek saklanıyor. Oturum açma esnasında girdi olarak girilen şifrenin Hash değeri ile oluşturulan şifrenin Hash değeri eğer eşleşiyorsa oturum açma işlemi başarılı oluyor.

Zaten çoğu modern sistemde bir de şifre verilerini tuzlayarak veritabanlarında öyle tutuyorlar.