← Back to list

Ders:3 Bcrypt ile Hashing(Şifreleme) İşlemleri — Detaylı Anlatım (I 😍Node.js)

Hepinize merhaba Node.js eğitim yazı serimin 3. yazısı ile karşınızdayım. İlerde yazmayı düşündüğüm konulara temel olması sebebiyle…

Alper Reha YAZGAN · 2020-06-14 21:12 · 61 claps · 5.6 min read
#nodejs #bcrypt #hashing #node-js-tutorial #crypto
Open on Medium ↗
Wiki topics: CRY · Crypto & Web3 🌐 · Web Development

Ders:3 Bcrypt ile Hashing(Şifreleme) İşlemleri — Detaylı Anlatım (I 😍Node.js)

Hepinize merhaba Node.js eğitim yazı serimin 3. yazısı ile karşınızdayım. İlerde yazmayı düşündüğüm konulara temel olması sebebiyle yaklaşık 3 yazı boyunca Node.js üzerinde şifreleme işlemlerini anlatmayı planlıyorum ve bugün ilk anlatacağım konu olan Hashing(Şifreleme) ile başlıyoruz. Dilerseniz başlayalım!

Bugünkü yazımda sizlere Node.js ile bir yazının aslından farklı bir hale getirilerek başlangıçtaki halinden tahmin edilemez bir hale gelmesini sağlayan bir işlem olan hash işlemi üzerinde uğraşacağız ve Node.js hash kütüphanesi olan Bcrypt npm kütüphanesini kullanarak normal bir yazı ifadesini hash işlemine sokmayı ve stringleri(yazı ifadelerini) manipüle etmeyi öğreneceğiz.

İçerik olarak sırasıyla :

  1. Hash işlemi nedir bu işlemi neden ve nerede kullanıyoruz?
  2. Bcrypt kütüphanesinin Node.js üzerine kurulması hash(şifreleme) ve compare(şifrelerin karşılaştırılması) işlemlerinin gerçekleşmesi.
  1. Hash İşlemi Nedir ve Neden Kullanıyoruz?

Normal şifreleme işlemleri: (simetrik ve asimetrik şifrelemeler : gelecek yazımızda onlara değineceğiz) A(Şifrelenecek Yazı) + B(Şifre Anahtarı) = C(Çıktı Yazı) şeklinde olan ve girdi yazıyı şifre anahtarı ile manipüle ederek ondan bir çıktı elde edip tekrar o şifreleme anahtarı kullanarak(simetrik) veya B anahtarından türetilmiş tamamlayıcı(asimerik) anahtar ile şifreli yazıdan tekrar normal yazıyı elde edebildiğimiz işlemlerdir.

Hash işlemleri ise: A(Şifrelenecek yazı) + (HASH METHODU) → C(Hash Çıktısı) şeklinde olan ve A yazısından üretilmiş hash olan C çıktısının herhangi bir işlem uygulanarak tekrar A çıktısının geri elde edilemediği şifreleme yöntemine verilen isimdir.

Peki Hash Yöntemini Neden Kullanıyoruz?

Bazen veri işlemelerinde verinin saklanacağı yerde saf halde tutulması veya geri tahmin edilebilir olması bizim için sıkıntılı bir durumdur. Bunun en açıklayıcı ve en çok kullanılan alanı kullanıcı parolasınm veritabanında saklanması ve çağrılmasıdır. Eğer bir web programlayıcısı iseniz ve kullanıcıdan kayıt esnasında kullanıcı adı ve parolayı aldıktan sonra kullanıcı şifresini direkt olarak veritabanında tutar iseniz bu çok tavsiye edilen bir durum değildir. Hatta KVKK(Kişisel Verilen Korunması Kanununa) göre de suçlu bir davranıştır. Veritabanınızın herhangi birisi tarafından çalınması veya okunması durumunda kullanıcının şifresi saf bir halde görülebilecek ve bu bir güvenlik açığı olacaktır.

İşte böyle verinin aslının veya saf halinin sizin için önemli olmadığı ve saklanması gerektiği durumlar için verinin her zaman aynı veriden aynı çıktıyı üreten ve de çıktıdan tekrar verinin saf halini geri elde edilemediği bir method arıyorsanız doğru yerdesiniz. :-)

Şimdi ise kodlamaya ve uygulamaya başlayalım.

2) Node.js Bcrypt Kurulumu ve Hash,Compare İşlemleri Uygulanması:

Yukarıda anlattığım hash işlemini node.js ile Bcrypt npm kütüphanesini kullanarak gerçekleştirebiliyoruz. Birazdan yapacağım örnekte sektörde çokça kullanım alanı olan Registration(Kullanıcı Kayıt) ve Login(Kullanıcı Giriş) kısmında Bcrypt kullanımnı göstereceğim. Dilerseniz kodlamaya başlayalım.

1-) İlk olarak projemizi oluşturmak için terminal ekranımızı açıyoruz ve projemizi oluşturuyoruz.

cd desktop # masaüstüne geçiyoruz.
mkdir node-bcrypt-test # klasörümüzü oluşturuyoruz.
cd node-bcrypt-test # proje dizinimize geçiş yapıyoruz.

2-) Ardından bu dizinimizi node.js çalışmasına uygun hale getiriyoruz.

npm init # ardıdnan bilgileri dolduruyoruz.

3-) Şimdi bcrypt kütüphanesini indiriyoruz. Ayrıca express kütüphanesini de indirelim web binamızı onunla kuracağız. Terminal ekranımıza şu komutu yazıyoruz.

npm install express # express kurulumu hazır web yapısı için
npm install bcrypt # hash şifreleme kütüphanemiz.

4-) Yükleme tamamlanınca server.js ve adında klasör oluşturalım ve dosyamızı da oluşturunca dosya dizinimiz resimdeki gibi olacaktır.

Dosya dizinimiz

Dosya dizinimiz

Bcrypt asıl olarak iki adet işlemi gerçekleştirmektedir. Onlar ise:

  • Birincisi verilen yazıyı alıp onu hash’leyip ardından hash’lenmiş ifadeyi dönen hash işlemi (Örnek kullanıcıdan alınan saf şifrenin bu işleme tabii tutulup hashli yazı elde edilmesi.)
  • İkincisi ise verilen saf yazıyı ve ikinci olarak da verilen hash’li ifadenin birbirinin aynısı olup olmadığını (true|false) dönen bir işlem olan compare(karşılaştırma) işlemidir.(Örnek: Kullanıcı giriş yapmak için isim ve parolasını girdiğinde veritabanından o kullanıcıyı bulup hash ile kaydettiğimiz şifresi ile giriş yapma işleminde gelen şifrenin aynı olup olmadığının kontrol edilmesi.)

Bcrypt gelen ifadeyi değiştirirken değişken ile birlikte bir parametre daha alır ve o parametre de saltRounds parametresidir. Bu parametre Bcrypt içerisindeki değiştirme algoritmasının kaç kere dönüş yapacağını belirler. Biz genel olarak 12 değerini gireceğiz. 12 kere dönüş yapma işlemi yaklaşık olarak 0.35 saniye sürmektedir. 25 dönüş girecek olursanız çıktı elde edilmesi için 1 saat beklemeniz gerekecektir. Bu sebeple dönüş zamanları dikkate alınarak değerler verilmelidir. Dokümantasyondan zamanlar hakkında bilgi alabilirsiniz.

Birazdan hash koduna geçeceğiz. Ancak son olarak da benim kullanımda hoşuma giden bir şeyden de bahsedeceğim. Şifreleri veritabanında saklarken kullanıcıdan şifreyi aldıktan sonra başına veya sonuna sizin belirlediğiniz bir yazıyı ekleyip sonra veri tabanına kaydetmeniz basit ve benim de kullandığım bir method size de tavsiye ediyorum. Aşağıda kodumuzdaki txtPrefix’in sebebi budur. :-)

Bcrypt Hash Fonksiyonu az önce bahsettiğimiz gibi verilen sayı kadar döner ve bir gecikme vardır. Bu sebeple kodunu yazarken 2 farklı şekilde yazabiliriz.

    1. Hashlemeyi bekleyip ardından sonucu elde etmek (Sync -Senkron) Bu işlemi yapan bcrypt fonksiyonu bcrypt.hashSync()
    1. Hashlemeyi beklemeyip hashleme sonucu dönünce işlemimize devam etmek(Async-Asenkron) Bu işi yapan bcrypt fonksiyonu ise : *async / await *bcrypt.hash()

Öncelikle express ile ortamımızı hazırlıyoruz.

server.js

server.js

Ardından şifreleme fonksiyonlarımızı yazıyor. İki şekilde yazabileceğimizden bahsetmiştik. Öncelikle

Senkron Kullanımı :

Senkron kullanım için server.js kodumuzun alt kısmına şunları ekliyoruz.

Hash(Şifreleme) ve Compare(Karşılaştırma) Fonksiyonları

Hash(Şifreleme) ve Compare(Karşılaştırma) Fonksiyonları

Bütün bu işlemlerden sonra server.js dosyamız şöyle gözükecektir.

Senkron halde server.js dosyası

Senkron halde server.js dosyası

Eğer yukarıda express ile yazmış olduğum kod hakkında daha fazla bilgi almak ve eğitim videosu ile öğrenmek isterseniz benim youtube üzerinde paylaştığım eğitim serisi olan Node.js Eğitim Serisi videolarımı izleyebilirsiniz. Eğitim Serisi Linki: https://youtu.be/RA5QKygv62Y

Yukarıdaki kodu çalıştırdığımızda konsol ekranında şöyle bir görüntü göreceğiz.

Kod çalıştğında konsol ekran görüntüsü

Kod çalıştğında konsol ekran görüntüsü

Sonrasında tarayıcımızı açıp http://localhost:8000/**kullaniciismi/sifre **şeklinde girdiğimizde aşağıdaki gibi bir sayfa karşımıza çıkacaktır.

Asenkron Kullanımı:

Bu kullanımın önceki kullanımdan farkı fonksiyonun döndüğü değeri beklemeden çalışmaya devam etmesi ve ne zamanki saltRound miktarı kadar dönüş yapacak ve hashli yazıyı hazır hale getirecek o zaman geri o satıra dönüp çalışmaya devam edecektir. Bunu Node.js Javascript syntax’ında aşağıdaki gibi gösterebiliyoruz. Senkron gösterimden farkı bilgisayara özel olarak o değişkeni veya fonksiyonun cevabı olduğunu ve onu beklemesi gerektiğini (await), kodun çalışacağı fonksiyona ise function context(bağlam) içerisinde asenkron bir yapının olduğunu ve ona göre davranması gerektiğini söylediğimiz async function anotasyonlarını aşağıda resimde verildiği şekilde kodlayarak dosyamızı kaydediyoruz ve çalıştırıyoruz.

Asenkron haldeki kod

Asenkron haldeki kod

Kodu yazıp terminal ekranına yeniden node server.js yazdığımız zaman ve tarayıcımızda http://localhost:8000/**kullaniciismi/sifre **şeklinde girdiğimizde aşağıdaki gibi bir sayfa karşımıza çıkacaktır.

Asenkron şekilde yazdığımızda ekran çıktısı

Asenkron şekilde yazdığımızda ekran çıktısı

Böylece kullanıcının istek yaptığı url üzerinden kullanıcıdan girdiler alabildik ve Bcrypt ile gelen ifadeyi ayarladığımız konfigürasyonlar ile şifreleme işlemine tabii tuttuk ve şifreli yazıyı elde ettik. Ardından saf yazı ile şifreli yazıyı birbiri ile karşılaştırarak bu iki ifadenin eşitlik durumunu kontrol ettik ve bu işlemden değerler dönebildik.

Devamında neler yapılabilir?

  • Kullanıcı kayıt sayfasından veriler alınabilir ve alınan kullanıcı şifresi gösterildiği gibi şifrelenerek ardından bu yazı veritabanında saklanabilir.
  • Kullanıcı giriş yapma esnasında alınan saf şifre veritabanından gelen kullanıcı şifresi ile karşılaştırılarak şifre ile kullanıcı girişi yapılabilir.
  • Bilet kontrol uygulamaları gibi uygulamalarda kullanıcıya etkinliğe özel verilen bilet unique ID’si compare(karşılaştırma) işlemi gibi veri doğruluk işlemlerinde kullanılmak üzere bu kodlar kullanılabilir.
  • … Daha yazmakla uzatmayacağım birçok şey yapılabilir. :-)

Şifreleme mantığı ve kullanımı veri gizliliği ve korunması başta olmak üzere etkinlik bilet gibi kişiye hizmete özel ID veren uygulamalarda doğrulama kapsamında çokça başvurulan ve tercih edilen bir yöntem olarak sektörde yer alıyor. Bugünkü yazım dahilinde sizlerle hash’leme işlemini Node.js üzerinde anlatmayı ve şifreleme teknikleri hakkında bilgi vermeyi amaçladım. Umarım faydalı olur.

Gelecek yazılarımda diğer teknikler ve uygulamalarına bakmayı düşünüyorum.

Görüşmek üzere.

Sağlıcakla kalın…

Alper Reha YAZGAN

Sosyal Medya Hesaplarım: 1- Youtube 2- Twitter 3- Instagram


메타데이터
post_id
adf478b3e10d
slug
ders-3-bcrypt-ile-hashing-şifreleme-i̇şlemleri-detaylı-anlatım-i-node-js-adf478b3e10d
url
https://medium.com/@alperreha/ders-3-bcrypt-ile-hashing-%C5%9Fifreleme-i%CC%87%C5%9Flemleri-detayl%C4%B1-anlat%C4%B1m-i-node-js-adf478b3e10d
canonical_url
https://medium.com/@alperreha/ders-3-bcrypt-ile-hashing-%C5%9Fifreleme-i%CC%87%C5%9Flemleri-detayl%C4%B1-anlat%C4%B1m-i-node-js-adf478b3e10d
author_url
https://medium.com/@alperreha
status
ok
fetched_at
2026-07-29 00:50:04