ROT13 Converter ve ROT13 Şifreleme Yöntemi

ROT13 (Rotate13) forumlarda ve web proxy sayfalarında sıkça görülen ayrıca, çeşitli puzzle, riddle, bulmaca türlerinde karşımıza çıkan bir şifreleme türüdür. Daha önce dergilerimizde kriptografiye giriş yapmış ancak çeşitli sebeplerden devamını getirememiştim. Şimdi kaldığım yerden yavaş yavaş devam etmek istiyorum. Öncelikle ROT13 nedir onu bir öğrenelim, yazının sonundaki ROT13 Converter ve kaynak kodları ile de hem kriptografi bilgimizi hem de assembly bilgimizi artıralım.

ROT13 Nasıl Çalışır?
ROT13 (Rotate13) yer değiştirme yöntemi kullanan bir Caesar(Sezar) şifreleme türüdür. Mantık olarak ingiliz alfabesindeki bir harfin 13 harf sonraki harf ile eşleşmesidir. Harflerin eşleşme tablosunu resimden göre bilirsiniz.

ROT13 Eşleştirme tablosu

Resimde de görüldüğü gibi bluedevil = oyhrqrivy olarak şifrelenir.

ROT13 Converter (Encoder/Decoder)
Assembly çalışmalarıma bir yenisini de küçük bir ROT13 Dönüştürücüsü ekleyerek devam etmek istiyorum. Mantık olarak ingilizce alfabesindeki bir harfin 13 sonraki harf ile yer değiştirmesi ile oluşan ROT13 şifreleme yöntemini assembly dilinde şöyle kullandım. Girilen metnin her bir karakterini bir döngüye soktum. Bu döngü ilk önce o karakterin bir harf mi yoksa faklı bir karakter mi olduğunu karşılaştırıyor. Eğer harf değilse doğrudan ekrana onu yazıyor eğer bu bir harf ise a-m ile A-M arasında olanların hex değerine “13″ ekleyip yazıdırıyor, eğer n-z ya da N-Z arasında ise 13 çıkartıp ekrana yazdırıyor.

Not: Bu küçük programcığı yazarken arkadaşlarım öncelikle bir ASCII tablosunu incelemelisiniz:

http://www.sctzine.com/wp-content/plugins/downloads-manager/img/icons/winrar.gif download: [SCT]ROT13 Converter (61.09KB)
added: 07/01/2010
clicks: 448
description: ROT13 Encoder/Decoder, assembly çalışmaları için örnek bir ROT13 şifreleyicisi. Kaynak kodları içindedir.



6 Yorum yapılmış “ROT13 Converter ve ROT13 Şifreleme Yöntemi ”yazısı için

  1. infinie Demişki:

    Merhabalar, aşağıda DOSta NASM ile kullanılarak oluşturulan COM dosyasının çalıştırılmasıyla kullanılabilen eskiden yazdığım bir ROT13 kaynağı vardır.

    [bits 16]
    org 100h
    [SECTION .text]
    mov si,inFinie
    mov di,oStr
    xor cx,cx
    call Rot13
    call afterROT

    mov di,sStr
    kbrd:
    mov ah, 0×10 ;get character
    int 0×16
    cmp al,0x0d
    je enter_key
    stosb
    call putch
    jmp kbrd

    enter_key:
    mov al,0x0d
    call putch
    mov al,0x0a
    call putch

    xor al,al ;append 0×00
    stosb

    mov si,sStr
    mov di,oStr
    xor cx,cx ;reset counter
    xor ax,ax
    call Rot13
    call afterROT
    int 0×20

    Rot13:
    inc cx
    lodsb
    or al,al
    jz exit
    fir:
    cmp al,’A’
    jl noop
    cmp al,’Z’
    jle rangeOK

    cmp al,’a’
    jl noop
    cmp al,’z’

    rangeOK:
    sub al,13
    cmp al,’a’
    jge noop
    add al,26

    noop:
    stosb
    jmp Rot13

    exit:
    ret

    afterROT:
    xor al,al
    stosb
    sub di,cx
    mov si,di
    call print
    ret

    print: ;at si
    lodsb
    or al,al
    jz .bit
    call putch
    jmp print
    .bit:
    ret

    putch: ;in al
    xor bh,bh
    mov bl,7
    mov ah,0x0E
    int 0×10
    ret

    [SECTION .data]
    inFinie db “EBG13 pbqre ol vaSvavr”,0x0d,0x0a,0
    [SECTION .bss]
    sStr resb 0×1000
    oStr resb 0×1000

  2. admin Demişki:

    İşte bu sitede görmek istediğim yorumlar. Çok çok teşekkürler!!

  3. KUTALMIS Demişki:

    Bir kod da ben vereyim o zaman :)
    Derleme : nasm kod.asm -o kod.com
    ;———————————
    org 0×100

    jmp basla

    _yazi dd 0×0
    _i dd 0×0
    _j dd 0×0

    LC0 db “BLUEDEVIL”,0xD,0xA, 0
    LC1 db “KUTALMIS”,0xD ,0xA,0

    basla:

    mov si,LC0
    call yazi_yaz

    mov dword[_yazi],LC0
    mov dword[_j],9
    call _cevir

    mov si,LC0
    call yazi_yaz
    ;——————————–
    mov si,LC1
    call yazi_yaz

    mov dword[_yazi],LC1
    mov dword[_j],8
    call _cevir

    mov si,LC1
    call yazi_yaz
    ;——————————–
    mov ah,0×0
    int 0×16
    ;——————————–

    _cevir:
    mov dword [_i], 0
    L7:
    mov ecx, dword [_i]
    mov edx, dword [_yazi]
    movzx eax, byte [ecx+edx]
    cmp al, 78
    jle L5
    sub al, 13
    jmp L10
    L5:
    add al, 13
    L10:
    mov byte [ecx+edx], al
    mov eax, dword [_i]
    inc eax
    mov dword [_i], eax
    cmp eax, [_j]
    jne L7
    ret
    ;——————————–

    yazi_yaz:
    mov ah,0xe
    .tekrar_yaz:
    mov al,byte[si]
    int 0×10

    inc si
    cmp byte [si],0×0
    jne .tekrar_yaz
    ret

  4. KUTALMIS Demişki:

    Bu arada aklıma gelmişken yazayım, bir haftadır bir boot loader üzerinde çalışıyordum, iki gün önce bitti, yazısını da yazdıktan sonra sana yollasam dergide ya da burda yayınlar mısın?

    Ne iş yaptığını kısaca anlatacak olursam, 3 dosyadan oluşuyor. boot, pro.com, ayarlar.ini bu üç dosyadan boot, başlangıç sektörüne yazılacak, bunlar boot edilecek medyaya yazıldıktan sonra, açılışta boot, pro.com u belleğe yüklüyor, o da ayarlar.ini yi belleğe yüklüyor ve ayarlar.ini içinde yazan tüm dosya isimlerini medyadan buluyor, hepsini yanında yazan adreslerine yüklüyor, daha sonra ayarlar dosyasındaki atlanması istenen adrese atlıyor.

    Anlayacağın baya gelişmiş bir loader (grub değil tabi :) )
    Aslında kendi sistemimi boot etmek için yazdım ama genel amaçlı bir kod sonuçta, birilerinin işine yarayabilir, özellikle sistem programcılarının.

    İyi çalışmalar blue görüşmek üzere : )

  5. KUTALMIS Demişki:

    Flood gibi oldu ama : ) blog kodları bozuyor, o nedenle buradan kopyalanan direkt çalışmıyor, farkettiklerim “” ve 0x deki x ler, onları düzeltince çalışıyor, bilgine.

  6. admin Demişki:

    Kutalmış çok isterim. Yazıyı bitirir bitirmez yolla hemen yayınlayalım. Bu arada Buradan değil de e-posta kullanalım mesajlaşmak için ;)

Yorum Yapın