Node.js Şifreleme İşlemi (Cryptr)
Hepinize merhaba dostlarım 😊. Bu yazımda sizlere node.js üzerinde şifreleme yapmamızı sağlayan cryptr kütüphanesinden bahsedeceğim. Normalde biz mongoDB ile kayıt işlemi yaptırırken (okumayan dostlarım buradan ulaşabilir) direkt olarak ad soyad ve şifreyi direkt olarak veri tabanımıza aktarıyorduk. Bu güvenli bir yol mudur diye soracak olursanız değildir derim. Çünkü herhangi bir kötü amaçlı kişi Allah korusun eline geçirdiğinde bizim veri tabanımızı çok büyük hatalarla karşılaşabiliriz. İşte bu ve bunun gibi kötü zamanlara denk gelmemek için uygulamalarımızda şifreleme yapmamız lazım.
PEKİ ŞİFRELEME HER ZAMAN GEREKLİ Mİ
Geldik bir diğer başlığımıza. Şifreleme artık çağımızın gereksinimi haline gelmiş bulunmakta dostlarım. Neden diye soracak olursanız bir örnek üzerinden açıklayayım. Bir siteye kayıt oldunuz varsayalım ve bu sitenin de sizden ad, soyad, email ve password bilgilerini istediğini gördünüz. Tamam buraya kadar sorun yok kaydınızı gerçekleştiriiyorsunuz. Normalde abc gibi basit şire koymak yerine Da Vinci şifresi gibi karmakarışık şifre koyarsınız değil mi amaç verilerim çalınmasın hesabım çalınmasın diye düşünce olur sürekli zihninizde. İşte bu verilerin güvenliği için koymuş olduğunuz şifrenin karmaşıklığı ve sizin hesabınızı koruma isteğinizin aynısı bir programcı tarafondan da gereklidir. Çünkü sisteme zarar gelmesini, üyelerin bilgilerinin çalınmasını o da istemez :)
Artık buraya kadar sorun kalmamıştır ve olayın anafikrini anladınız umuyorum dostlarım. O halde sözü daha fazla uzatmadan hemen kodlama işlemine geçişimizi yapalım
MODÜLÜMÜZÜ KURALIM
Eveeet artık proje ortamımızı kurmayı node.js üzerinde mongoDB işlemlerinde yapa yapa artık öğrenmiş olduk (takılan dostlarım için buraya link bıraktım). Şimdi bu kısım tamamsa yani proje ortamımız tamamsa artık gelelim proje klasörümüzün ana dizinine ve terminalimizi açalım. Daha sonrasında da terminalimize
npm install --save cryptr
komutumuzu yazıp şifreleme kütüphanemiz olan "CRYPTR" 'yi yükleyelim. Yükleme işlemi diğer modüller gibi çok uzun şekilde sürmeyecektir kısa bir zaman alacaktır. Modülümüz yüklendikten sonra ise bir index.js dosyası oluşturalım dostlarım. Daha sonra ise içerisine gelip
const Sifrele = require('cryptr') // MODÜLÜMÜZÜ YÜKLEYELİM
const sifre_islem = new Sifrele("%&/mfsoftware_blog%&/") // ŞİFRELEME ANAHTARIMIZI GÖNDERELİM (ZORUNLU ALAN)
var sifrelenmis = sifre_islem.encrypt("692") // ŞİFRELENECEK OLAN VERİMİZİ GÖNDERELİM (BU ALANDA ŞİFRELENİYOR)
var sifresiz = sifre_islem.decrypt(sifrelenmis) // ŞİFRESİ ÇÖZÜLECEK VERİMİZİ GÖNDERELİM (BU ALANDA ŞİFRE ÇÖZÜLÜYOR)
console.log("Şifresiz Hal: "+sifresiz); // VERİMİZİ ŞİFRESİZ HALDE YAZDIRALIM
console.log("Şifrelenmiş: "+sifrelenmis); // VERİMİZİ ŞİFRELEYEREK YAZDIRALIM
şeklinde kodlarımızı yazalım. Yorum satırlarından da anladığınız üzere her bir adımdaki işlemlerin nasıl gerçekleştiği açık ve ceçik bir şekilde kod karmaşası olmadan hızlı bir şekilde şifreleniyor ve şifre çözülüyor :). Gelelim ekran çıktısında ne oluyor buna bakalım. Terminalimizi açıp
node index.js
komutumuzu yazalım ve enter tuşuna basalım. Ekran çıktısı
Şifresiz Hal: 692
Şifrelenmiş: 2d22065229446729e362127d972d21540c360b24cce150241e4a366d381c5e2894b63f22dc23e485ce1426b453bac0931a55439a1de79e3600315fcad37c1757bf1f2f030a5a75436eef63f3ad8a447c40a23ba8d5b
6743c1bf13f77970511db9c6128
şeklinde karşımıza bir çıktı geliyor ve işlemimiz başarılı bir şekilde tamamlanmış oluyor. İşte şifreleme işlemimiz bu kadar basit. Şimdi gelelim ve bununla ilgili bir pratik yapalım. MongoDB üzerinde kayıt ekleme sırasında ve kaydımızın listelenmesi sırasında cryptr kütüphanesini kullanalım. Ama bunun yanında bir de geçmişte anlattığım konulardan birisi olan yargs kütüphanesini ve validation işlemlerini (okumayan dostlarım buradan ve şuradan ulaşabilirler) kullanalım. Bunların haricinde node.js üzerinde mongoDB konusunda takılan dostlarım "Node.js MongoDB" başlıklı yazılarımı okursa bu konuyu biraz daha iyi anlayabilir. O halde vakit kaybetmeden mongoose modülünü kuralım ve işlemlerimize başlayalım. Öncelikle terminalimize gelip
npm install --save mongoose@4.12.4
komutumuzu yazıp (tabii bunu terminal üzerinden proje kök dosyasına gelip yazmamız lazım) enter tuşuna basalım ve modülümüzü yükleyelim. Modülümüz yüklendikten sonra ise bir user.js dosyası oluşturalım ve içerisine
const mongoose = require('mongoose')
mongoose.connect("mongodb://127.0.0.1:27017/mongoose-nodejs",{useMongoClient : true},function (err,res){
if (err) throw err
})
var Schema = mongoose.Schema
var UserSchema = new Schema({
name : String,
surname : String,
password : String
})
var User = mongoose.model("User",UserSchema)
module.exports = {
User
}
şeklinde kodlarımızı yazalım. Sonrasında bir index.js dosyası oluşturalım (eğer index.js varsa içerisini tamamen silip kodlarımızı rahat şekilde yazabiliriz) ve içerisine
const User = require('./user') // USER MODÜLÜ
const mongoose = require('mongoose') // MONGOOSE KÜTÜPHANESİ
var db = mongoose.connection // BAĞLANMA KOMUTUMUZ
const Sifrele = require('cryptr') // ŞİFRELEME KÜTÜPHANESİ
var sifreleme_islem = new Sifrele("%&/mfsoftware_blog%&/") // ŞİFRELEME İÇİN TOTAL KEY KISMI
// YARGS
var argv = require('yargs')
.command("insert","Kayıt Ekleme İşlemi",function (yargs){ // YARGS MODÜLÜ INSERT KOMUTU İÇİN AÇIKLAMA
yargs.options({ // AYARLAMALAR
name : {
demand : true,
description : "İsim",
type : String,
alias : "n"
},
surname : {
demand : true,
description : "Soyisim",
type : String,
alias : "s"
},
password : {
demand : true,
description : "Şifre",
type : String,
alias : "p"
}
}).help("help")
}).help("help")
.command("read","Kayıt Getirme İşlemi",function (yargs){ // YARGS SURNAME KOMUTU
yargs.options({ // AYARLAMALAR
name : {
demand : true,
description : "İsim",
type : String,
alias : "n"
},
surname : {
demand : true,
description : "Soyisim",
type : String,
alias : "s"
}
}).help("help")
}).help("help")
.argv
// VERİ EKLEME FONKSİYONU
insert = (name,surname,password) =>{
var user_1 = new User.User({
name : name,
surname : surname,
password : password
});
user_1.save(function (err){
if (err) throw err;
console.log("Eklendi");
});
}
// VERİ GETİRME KISMI
read = (name,surname) => {
User.User.find({
name : name,
surname : surname
},function (err,res){
if (err) throw err
res.forEach(function (item,index) {
console.log("Adınız: "+item.name)
console.log("Soyadınız: "+item.surname)
console.log("Şifreniz: "+sifreleme_islem.decrypt(item.password)) // ŞİFRE KISMINDA ŞİFRELENMİŞ VERİYİ ÇÖZELİM
})
})
}
var command = argv._[0] // KOMUTUMUZU ALALIM
if (command == "insert"){ // KOMUTUMUZ INSERT İSE EKLEME İŞLEMİ YAPILACAK
if (typeof argv.name !== "undefined" && typeof argv.surname !== "undefined" && typeof argv.password !== "undefined"){
insert(argv.name,argv.surname,sifreleme_islem.encrypt(argv.password))
}
}
if (command== "read"){ // KOMUTUMUZ READ İSE KAYIT GETİRME İŞLEMİ YAPILACAK
if (typeof argv.name !== "undefined" && typeof argv.surname !== "undefined" ){
read(argv.name,argv.surname)
}
}
şeklinde kodlarımızı yazdık. Yorum satırlarında kodların işleyişinden de sistemin genel olarak nasıl çalıştığını kavradık ama bunu test ederek görmek daha sağlıklı olacaktır :). Bunun için hemen gelip terminalimizi açalım ve
node index.js insert --name MFSoftware --surname Blog --password 123
şeklinde örnek komutumuzu yazalım. Yani burada isim kısmına MFSoftware geleceğini, soyisim kısmına Blog geleceğini ve şifre kısmına da 123 geleceğini istiyoruz. Ama bu şifre veri tabanımıza böyle kaydedilmeyecek hepimiz biliyoruz. Enter tuşuna bastığımızda ise karşımıza
Eklendi
şeklinde bir uyarı çıkacaktır. Gerçekten eklendiğini test etmek için ise gelelim MongoDB üzerine ve kayıtları incelediğimizde
şeklinde verimizin eklendiğini ve şifre kısmımızın da cryptr ile şifrelendiğini görüyoruz. Şimdi bu kaydı çektiğimizde bizim şifremizi nasıl decrypt yapacağımızı da inceleyelim ve konumuzu noktalayalım. Öncelikle terminal kısmımızı açalım ve
node index.js read --name MFSoftware --surname Blog
şeklinde komutumuzu belirtelim. Enter tuşuna bastığımızda ise karşımıza
Adınız: MFSoftware
Soyadınız: Blog
Şifreniz: 123
şeklinde bir çıktı çıkacaktır. İşlemler bu kadar basit ve uygulamamız da sorunsuz bir şekilde çalışıyor.
Eveeet dostlarım 😊. Bu yazımda sizlere şifreleme neden gereklidir, Node.js üzerinde şifreleme nasıl yapılır ve bunların yanında da MongoDB üzerinde veri ekleme ve veri getirme işlemini de şifreleme modülü kullanarak elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bilgi aktarımı yapmış isem benimle iletişime geçmekten çekinmeyin. Konu başlarda biraz karmaşık veya zor gelebilir dostlarım anlıyorum özellikle öğrenme süreci içerisindeyseniz bu sancılı sürece alışkın olmanız lazım. Ayrıca bu süreç içerisinde sizlerden tek isteğim "İstikrarlı ve Azimli Olmanız, Bolca Pratik Yapmanız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır.
Hayallerinizi gerçekleştirmeni ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim
Yazar Hakkında
Kendi Halinde Bir Backend Developer