JavaScript ile Rot13 Şifreleme

1. Rot13 Şifreleme
Rot13, İngilizce “rotate by 13 places” ifadesinin kısaltmasıdır. Rot13 bir harfi latin alfabesinde kendisinden sonra gelen 13. harfle değiştiren basit bir harf değiştirme şifresidir. Rot13, antik Roma’da geliştirilen Sezar şifresinin özel bir durumudur.

2. JavaScript Fonksiyonu
function rot13(message){
const shiftAmount = 13;
return message.replace(/[a-zA-Z]/g, match => String.fromCharCode(match.charCodeAt() + (match.toLowerCase() < 'n' ? shiftAmount : -shiftAmount)));
}
shfitAmount değişkeni karakterimizi ascii tablomuzda 13 karakter ileri veya geri almak için tanımladık. Geri almamızın nedeni ascii tablosunda ’n' harfinden sonraki harfleri (örneğin o,p,q gibi) 13 karakter ileri alırsak yazı karakteri olmayan karakterleri elde etmiş oluruz. Bizim istediğimiz ise sadece latin alfabesi üzerinde kalmamız bu yüzden ’n’ karakterinden sonraki karakterlerden 13 karakter geriye gideceğiz. 13 karakter geri gitmemiz rot13 şifreleme algoritmasına uyduğu için bir sorun teşkil etmiyor.

3. String.replace()
String.replace(str|regex, func|str);
String.replace metodu ilk parametresine string veya regex alabilirken, ikinci parametresine de bir fonksiyon veya string alabilir. Bu methodu daha iyi anlamak için javascript.info adresine bakabilirsiniz.
Fonksiyonumuzda replace methodunun ilk parametresine regeximizi ikinci parametrete ise bu regex doğrultusunda eşleşen karakterlerin her biri için çalışan bir fonksiyon veriyoruz.
4. Regex
/[a-zA-Z]/g regeximizde [a-zA-Z] ifadesi latin alfabesindeki karakterleri
yakalamamızı sağlarken /g ifadesi bunu glabal olarak yapmamızı sağlar. Daha iyi
anlaşılması adına regexr.com adresinden regexi inceleyebilirsiniz.
5. Callback Fonksiyonu
match => String.fromCharCode(match.charCodeAt() + (match.toLowerCase() < 'n' ? shiftAmount : -shiftAmount)));
callback fonksiyonumuzda match değeri regeximizle eşleşen herbir karakteri
temsil ediyor. String.fromCharCode() methodu kendisine verilen ascii koduna
karşılık gelen karakteri bize verir. Örnek olarak:
String.fromCharCode(65) // "A"
şeklinde çalışır. match.charCodeAt() metodu ise tam tersi işlevi yerine
getiri. Örnek olarak:
"A".charCodeAt() // 65
şeklinde çalışır.
(match.toLowerCase() < 'n' ? shiftAmount : -shiftAmount)
Burada match.toLowerCase() metodu ile eşleşen karakterin büyük harf olma
ihtimaline karşın küçük harfe çeviriyoruz bu işlemi sadece 13 eklemaye yada
çıkartmaya karar vermek için yaptığımızdan sonucu etkilemeyecektir.