sonBAHAR’ın kodlama dersleri: Bölüm 5

QR kodlarını deşifreleme (DECODING)

Ve geldik en civcivli kısma arkadaşlar. Var olan, taranmış çalışan bir QR kodunu nasıl gözümüzle okuyacağız da anlayacağız? Evet bu mümkün! Şimdi gelelim daha önce yazılarımızda bahsettiğimiz maskelerle oluşturulmuş bir QR koduna. Bu kodu deşifre edip mesajı bir önceki edindiğimiz bilgilerle, elimizle gözümüzle okumaya çalışacağız arkadaşlar. Şekil 1’de bir QR kodumuz var ve maskelenmiş. Ben maskeledim, biraz spor olsun diye 111 numaralı desen ile maskeledim. Şimdi hangi desende maskelendiğini bulmak için 8. satıra geliyoruz ve şekilde gördüğünüz gibi yeşil kutudaki desene bakıyoruz. Beyaz-siyah-beyaz demek ki ( (i * j) % 3 + i + j ) % 2 = 0 desenine göre maskelenmiş diyoruz.

O halde her bir satır ve sütun sayılarını çarpıp 3’e bölümünden kalanı bulup tekrar satır ve sütunu topladıktan sonra 2’ye bölümünden kalanı bulacağız. Kalan 1 ise bitleri değiştirmeyeceğiz ama kalan 0 ise siyahı beyaz, beyazı siyah yapacağız. Tabi time pattern (zaman desenleri) ve başta belirttiğimiz dokunulmaz alanları değiştirmeden bu işlemi yapacağız. Üzerinde çiziktirdiğimiz aşağıdaki kodu okutabilirsiniz, hata düzeltme seviyesi (ECL) %7 okuyacaktır :)  Kodun üzerinde, size açıklama yapmak için çizdiğim yerler var gördüğünüz gibi bu yüzden hata düzeltme kodu bunları düzeltip okuyacaktır.

matkafasi2
Şekil 1

Daha sonra hata düzeltme seviyesine bakıyoruz oda siyah-siyah şeklinde olmuş yani L seviyesinde kodlanmış. Versiyon 1-L. Versiyon 1 olduğunu nasıl anladık çünkü kodumuz 21×21 piksel. Mod göstergesi (ENC) kısmına bakarsak hatırlayın sağ alt köşe 0100 yani mod göstergesi Byte kodlaması (karakter başına 8 bit) olacak. Şimdi maskeleme işlemini tersine çevireceğiz ve maskelenmemiş kodu elde ettikten sonra decode edeceğiz. Yukarıdaki örneğimizin sadece mesaj kısmını alıp inceleyelim bakalım neymiş bu QR kodundaki mesajımız. Bir önceki bölümlerden hatırlarsanız kodların mesaj kısmı hangi kısmı kapsıyor mor alanlarda göstermiştik. Hatırlamayanlar tıklasın.
decoded
Yukarıdaki şekilde sol taraftaki siyah kısım maskelenmiş kısım. Sağ taraftaki gri renkli kısım ise maskeyi ortadan kaldırdığımız kısım arkadaşlar. Bu decode işlemini piksel piksel koordinatlara göre ve bunu da kullanılan desene göre yapıyoruz. ( (i * j) % 3 + i + j ) % 2 = 0 desenini her piksele uyguluyoruz. Eğer sonuç 1 ise deseni değiştirmiyoruz, 0 çıkarsa deseni değiştiriyoruz. Siyahsa beyaz, beyaz ise siyah oluyor. Farkı görün diye gri şeklinde yaptım. Ayrıca bu byte mod’a göre desenlendiğinden 8 kutunun her birinin bit değeri vardır bunları da üzerine yazdım ve sonra siyah kısımları (bizde gri) topluyoruz ve tablodan (http://www.asciitable.com) karşılık gelen değerleri buluyoruz. Unutmayın, decode işlemini bitirdikten sonra sonlandırıcı nerede ise oraya kadar mesaj datanız (veriniz) yer alacaktır. Sonlandırıcı (Terminator) dan sonra hata düzeltme (error correcting) başlar. Bu bit değerleri 1,2,4,8,16, 32,64,128 şeklindedir. Kodlama (encoding) kısmında beyaz desenler 0 siyah desenler 1 değerine karşılık geliyor biliyorsunuz. Sağ alttan zik zak şeklinde gidiyorduk unutmayın. Bu yüzden 0100 şeklinde encode edildiğini görüyoruz. Uzunluk kısmı ise mesajımızın karakter sayısını göstermekte. matkafasi 9 karakterden oluşuyor. Şekilde gördüğümüz gibi 8 +1 = 9 bize uzunluk değerini veriyor. Alfanümerik modda kodladığımız HELLO WORLD metninin deşifre işleminde de uzunluk değerini hesaplamıştık. Tabi onda 9 bit uzunluğundaydı. Her QR kodunda ilk göreceğimiz hangi moda göre şifrelendiği daha sonra mesajın uzunluk sayısı ve daha sonra mesajın kendisi başlıyor. Peki bu bit değerleri (kutunun üzerindeki değerler) nereden çıktı diyenler için kısa bir tablo ile bunu da verelim ve siz mesajınızı decode ederken uygun bir şekilde yerleştirin.

bitdeger2
Dikkat ettiyseniz yukarıya çıkarken izlediğiniz değerler aynı olacak yani, 1,2,4,8,16,32,64,128 sırası var ve ardından bir üstte de aynı şekilde devam ediyor, sonra sola dönerken 8 kutu işaretliyoruz 4,8,16,32.. şeklinde gidiyor. Aşağıya inerken de bu sefer 64,128,16,32,4,8,1,2 şeklinde iniyoruz. Tabi bu kodlama modu “byte” olan bir QR kodunun decode edilmesi idi arkadaşlar. Alfanümerik modun decode işlemini ilk yazımızda ufak bir not olarak düşmüştüm orada detaylı olarak anlattık. Evet geldik 5 serilik yazımızın sonuna. Umarım hem eğlenmiş hem de yeni bir şeyler öğrenmişsinizdir. Acil bir QR kodu okutmanız gerektiğinde ve elinizde sadece kalem kağıt varsa bu yazıyı hatırlayın. Aşağıdaki QR kodunu telefonunuzdan okutmayı unutmayın. Sevgi ile kalın, başka bir yazıda görüşmek üzere, öptüm.

B.

bahar

About Bahar Uğurdoğan

Kriptolojistimsi.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>