Giriş
Ruby ile kolaylıkla hash ve şifreleme/şifre çözme işlemleri yapabilmekteyiz. Mevcut Ruby alt yapısı ile birçok hash ve şifrelem yöntemi doğrudan desteklenmektedir, bu sayede bu özellikleri kullanabilmek için çok fazla işlem yapmanıza gerek bulunmamaktadır.

Aşağıdaki örnekleri inceleyelim.

MD5 Hash
Hash yöntemlerinden en çok kullanılanı MD5 hash diyebiliriz. MD5 girdiğiniz herhangi bir uzunlukta veriyi 16 byte (128 bit) uzunluğunda bir özete çevirmektedir. Ruby‘de MD5 hashleme işlemi gerçekten çok basit:

# Eklenecek Kütüphaneler
require 'rubygems'
require 'digest'  

# MD5 hashlemek istediğimiz veri
ham_veri = "Merhaba Dünya!"

# Hashleme işlemi
hashli_veri = Digest::MD5.hexdigest(ham_veri)

#  Hash çıktısını ekrana yazdıralım
print hashli_veri

Girdiğiniz ham veriyi hashleyip, hex string olarak çıktısını size sundu.

SHA1 Hash
SHA1 ise 20 byte (160 bit) özet oluşturmaktadır:

# Eklenecek Kütüphaneler
require 'rubygems'
require 'digest'  

# SHA1 hashlemek istediğimiz veri
ham_veri = "Merhaba Dünya!"

# Hashleme işlemi
hashli_veri = Digest::SHA1.hexdigest(ham_veri)

#  Hash çıktısını ekrana yazdıralım
print hashli_veri

SHA2 Hash
SHA2 hash’de ise 256, 384 ve 512bit özet çıkaran üç farklı seçim mevcuttur:

# Eklenecek Kütüphaneler
require 'rubygems'
require 'digest'  

# SHA2 hashlemek istediğimiz veri
ham_veri = "Merhaba Dünya!"

# 3 farklı tipte SHA2 hashleme işlemi
hashli_veri_1 = Digest::SHA2.new(256).hexdigest(ham_veri)
hashli_veri_2 = Digest::SHA2.new(384).hexdigest(ham_veri)
hashli_veri_3 = Digest::SHA2.new(512).hexdigest(ham_veri)

#  Hash çıktılarını ekrana yazdıralım
puts hashli_veri_1
puts hashli_veri_2
puts hashli_veri_3

Gayet kullanışlı.

Simetrik AES256 Şifreleme
Şifreleme için birçok farklı algoritma kullanılabilir. Biz simetrik AES 256bit şifrelemeden örnek verelim:

# Eklenecek Kütüphaneler
require 'rubygems'
require 'digest'  
require 'openssl'  

# Şifrelemek istediğimiz ham veri
ham_veri 		= "Merhaba!"

# Ham anahtar verimiz
anahtar_verisi 	= "Ruby ile kolay şifreleme!"

# Kullanacağımız değişkenler
sifreli_veri 	= ""
cozulmus_veri 	= ""
anahtar 		= ""

# Şifrelenecek veriyi ekranda gösterelim
puts "Şifrelenecek Veri:" + ham_veri

# Anahtarımızı oluşturalım, SHA2 256bit kullanmak oldukça mantıklı
anahtar = Digest::SHA256.digest(anahtar_verisi)

# Şifreleyelim, AES 256bit, CBC modu
aes = OpenSSL::Cipher.new('AES-256-CBC')
aes.encrypt
aes.key = anahtar
sifreli_veri = aes.update(ham_veri) + aes.final

# Şifreli veriyi ekranda gösterelim, veri base64 kodlamasında olduğundan bir ön işlemden geçirelim
puts "Şifreli Veri:" + [sifreli_veri].pack('m')

# Şifreyi çözelim
aes.decrypt
aes.key = anahtar
cozulmus_veri = aes.update(sifreli_veri) + aes.final

# Çözülmüş veriyi ekranda gösterelim
puts "Çözülmüş Veri:" + cozulmus_veri

Sonuç
Ruby ile şifreleme ve hashleme işlemlerini gördük, umarım işinize yarar.