Binary Kodları Nasıl Yazılır?

Hepinize Merhabalar,

Önceki konularda da belirttiğim gibi işletim sistemi yapmaktayım.Assembly editörleri çok kötü ve kullanmak aşırı zor.Python ile yapmayı denedim ama : Python’u Bilmeyen Python Programı sorusuna hiçbir cevap gelmedi.Bu yüzden en verimli hali olan Binary kodlarını yazacağım.İnternette araştırdım,ancak bulamadım.Nasıl yazılıyor bu Binary kodları?

Ufak bir bilgi olsun, assembly sizin kastettiğiniz binary’nin kolay (insanlar tarafından okunabilir, yazılabilir) hali oluyor.

4 Beğeni

“Binary kodu” ne demek? Binary zaten bir kodlama sekli. Bir seyi, baska bir seyin tuketimi icin binary olarak kodlamamiz gerekiyor.

Mesela 42'nin Python’daki binary kodu 0b101010.

1 Beğeni

Evet,bunu biliyorum ancak 0001’i kendim yazamaz mıyım?

Python’da bunu yapıp .py yi .iso yapsam virtualbox’da çalıştırsam ekranda 42 yazar mı?

Hayir, cunku:

  • VirtualBox .iso calistirmiyor
  • Python kaynak dosyasi kodlamasi ile .iso kodlamasi farkli
    • ayni seyi bile kodlamiyorlar
  • Python’daki 42 ile herhangi bir ekrana “42” yazmanin hic bir alakasi yok.

Kendinize ait bir işlemci tasarlarsanız neden olmasın?

1 Beğeni

@EkremDincel @coderistan bana da anlatir misiniz binary kodu neymis?

Assembly filan dendigine gore duz kod iceren dosya formatlarindan (.COM, .bin) bahsedildigini dusunuyorum ama emin olamadim.

Hocam, benim anladığıma göre normal kodlarla yazdığı işlemleri(mesela add $1,$2,$3 assembly kodu gibi) saf 0 ve 1 kullanarak yapmak istiyor. Derlenmiş assembly kodlarından da bahsediyor olabilir. Ya da tüm yazılan kodların eninde sonunda sadece tek tip(her yerde çalışan) 0 ve 1’lere dönüştüğünü düşünüyor olabilir. O yüzden direkt 0 ve 1 lerle uğraşmak istemiş olabilir.

Yanlış anlamış da olabilirim.

Direkt 0 ve 1’lerle uğraşmak isteyebilirsiniz. Ama hangi mimariye, hangi işlemciye göre? Mesela mips için yazarsanız toplama işlemi şöyle yapılıyor.

00000001010010110100100000100000

Ama PIC16 için şöyle yazılıyor(örneğin)

00011101011101

kaynak
MIPS: https://www.eg.bucknell.edu/~csci320/mips_web/
PIC16: https://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf

3 Beğeni

Ben de @coderistan’ın söylediği şekilde anladım.

2 Beğeni

Ne kadar zor olabileceğini düşünmek istemiyorum :smiley:

Virtualbox .iso çalıştırıyor

Hepinize teşekkür ederim çok zor olacak.Bu yüzden Milis Linux ile çalışacağım.Bir hedef koymama yardımcı oldunuz…

Boot edilebilir bir USB/optik diskin .iso imajini mount edip sanal makinenin bunu boot diski olarak kullanmasini saglayabiliyor, evet, ama “isletim sistemi yazacagim” temali bir konusmada bunu “calistirmak” seklinde basitlestiremeyiz.

Veya aklinda baska bir calistirma sekli mi vardi?

decimal = int(input("Number in decimal format: "))

def binary(n):
    output = ""
    while n > 0:
        output = "{}{}".format(n % 2, output)
        n = n // 2
    return output

# our method
print(binary(decimal))

# another way
print(bin(decimal)[2:])

# yet another way
print("{0:b}".format(decimal))

ilginç bir şey buldum. int değerinde giriş yaptığın değerleri binayr ye çeviriyor. Bi kurcala fikir sahibi olursun en azından.

1 Beğeni

int zaten binary, bilgisayardaki her şey binary. Bu kod onluk tabanda yazılan sayının ikilik tabandaki yazılışını veriyor sadece.

2 Beğeni

Şöyle: (Ama ne işinize yarayacak bundan emin değilim.)

string_to_binary = {
    keys: f"{values[2:][:8]} {values[2:][8:]}" 
    if len(values[2:]) > 8 else values[2:].zfill(8)
    for keys, values in {
        chr(i): bin(int(chr(i).encode("utf-8").hex(), 16)) 
        if i > 127 else bin(i) for i in range(55296)
    }.items()
}

binary_to_string = {
    values: keys 
    for keys, values in string_to_binary.items()
}


def to_binary(string: str = "") -> str:
    return " ".join([string_to_binary[i] for i in string])


def to_string(binary: str = "") -> str:
    string = ""
    count = 0
    try:
        for i, j in enumerate(binary.split(" ")):
            if j.startswith("1"):            
                if count == 1:
                    string += binary_to_string[
                        binary.split(" ")[i - 1]
                        + " "
                        + binary.split(" ")[i]
                    ]
                    count = 0
                else:
                    count += 1
            else:
                string += binary_to_string[j]
    except KeyError:
        pass
    return string
    
    
print(to_binary("Merhaba Dünya"))
print(to_string(to_binary("Merhaba Dünya")))

Çıktı:

01001101 01100101 01110010 01101000 01100001 01100010 01100001 00100000 01000100 11000011 10111100 01101110 01111001 01100001
Merhaba Dünya
2 Beğeni

Bu mantığın şifreleme için kullanıldığı alanlar mevcut mu? Kayıtlı şifrelerin asla olduğu gibi saklanmadığını tahmin edebiliyorum fakat hangi türde saklandıkları konusunda fikir sahibi değilim.

Asıl sorum şu;

Python ile yazılmış bir program kullanıcı tarafından kullanılırken kişinin oluşturduğu kayıtlardaki şifreleri database de olduğu gibi değil de karmaşık bir yapı halinde kayıt etmek istersek bunu nasıl başarabiliriz.

Aklıma şöyle bir şey gelmişti. Bir sözlük oluşturup sözlüğün içerisine klavyedeki her tuşun karşılığında karmaşık bir sıra ile girilen tuş değerine karşılık bir kod oluşturacak ve o şekilde kayıt edecek. Kullanıcı giriş yapacağı zaman da giriş şifresini koda çevirip database deki ile eşleşiyor ise onaylayacak. Böyle bir şey için fikir verebilir misiniz? Ya da gereksiz bir ayrıntı mıdır bu durum?

Hangi mantık? "a" yerine "01100001" koymak mı?

Saklanmaması gerektiğini tahmin edebiliyorsunuz. Büyük firmaların yaşadığı rezaletleri internette araştırabilirsiniz.

"Karmaşık bir yapı"yı tanımlayarak. Bir kelimeyi ters çevirince de çok karmaşık olabiliyor.

Güzel bir başlangıç ama bir problem var, her harf karşılığında oluşturulacak kodun sabit olması lazım. Bu sabit kod nerede saklanacak? Bunu saklamak ile şifrenin kendisini saklamak güvenlik açısından bir fark ifade eder mi? Bu kodlar yazdığımız programın kodlarının içinde olacak demeyin, uygulamalar da birer dosya sadece.

Şifreleri saklamak için tabii ki güvenilir yöntemlere ihtiyacımız var, niye gereksiz olsun.

Ama işin sonunda bu konu üzerinde kafa yoran kişiler şifreleri hiç saklamamaya karar vermişler, herhangi bir yerde yazmayan şifreyi kimse okuyamaz sonuçta:

2 Beğeni

Sifreleme tasarlamak icin kullanildigi alanlar mevcut, cunku 0b101010 ile 42 ile 0x2a arasinda hic bir fark yok. Bunlarin hepsi bir sayi, hepsi ayni sayi. Bazi hesaplar icin ikilik tabani kolay, bazilari icin onluk, bazilari icin onaltilik. Kimi tasarimlar icin “elektrik var-elektrik yok-elektrik var…” daha kolay, kimileri icin 205 mV. (Arduino’da analog porttan “42” okumak icin gereken yaklasik voltaj.)

Kullanim amaclarina gore saklanma yontemleri degisiyor. pfx dosyasinda saklanan sertifikalar da var, DER formatinda tutulan anahtarlar da, database’e UTF-8 duzyazisi olarak girilen parolalar da.

Tersten cevaplayayim: Nasil basaramayiz: Kendi yontemimizi tasarlayarak. Ölümlüler icin kriptografinin birinci kurali, kendi bozuk cozumunu uretmeyip; arastirilmis, incelenmis, test edilmis metodlari kullanmaktir.

@EkremDincel’in de belirttigi gibi, dogrulama parolalarini bir yerde tutmamiza bile gerek yok. Ama hassas bir veriyi oldugu gibi tutmamiz gerekirse, sifreliyoruz. Sifreleme anahtarini kullanicidan alabiliyoruz, sifre cozme anahtarini kullaniciya verebiliyoruz, veya kullanicidan bir parola girmesini isteyip o paroladan uretebiliyoruz.

Birinci kurali ihlal ettigi icin guvenli olmadigini soyleyebilirim :slight_smile: Bu herkesin aklina gelen seyler icin gecerli.

Bir tur substitution cipher. Kullanilan ilk sifreleme yontemlerinin biraz daha gelismis hali. Ciphertext ile plaintext izomorfik (bire bir fonksiyon iliskili) oldugu icin frekans analizlerine, sozluk saldirilarina acik. Simetrik oldugu icin sifreleme anahtarini bilen desifre edebiliyor:

(Akademik olarak hayir, pratikte cok, cok az.)

Kriptografiye giris adimi oldugu icin gerekliligi ogrenme/is bitirme aksindaki pozisyona gore degisir. Fikir icin hali hazirda yazilmis binlerce makaleden birini tavsiye ediyorum. “Sifreleme isini nasil yanlis yapiyorsunuz” temali yazilar guzel bir giris olabilir; ev yapimi basit yontemleri tanitirken bir yandan da neden guvensiz olduklarini ve yerlerine hangi denenmis yontemi kullanmanin daha kolay olacagini anlatirlar.

1 Beğeni