İçerikler

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.

/rot13.png

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.

/ascii-table.webp

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.