Rabu, 20 Januari 2021

Dasar-dasar Encoding Data - Part 1

Satuan terkecil adalah Byte bukan Bit 

1. Menghitung Byte sebuah file

"HALO" berukuran 5Byte 

H = 1Byte
A = 1Byte
L = 1Byte
O = 1Byte
Ditambah 1 newline (1Byte)

Untuk memastikan apakah benar HALO berukuran 5Byte, saya save dan beri nama *file*

 

Dan ternyata benar :)


2. Melihat representasi dari "file" menggunakan HEXDUMP (hd)

 hd file  

 

48 = H
41 = A
4c = L
4f = O
0a = newline

Darimana saya tahu? Perhatikan tabel ascii dibawah ini

Ascii Table 

Kita buktikan  

 - Tanpa newline

 echo -ne "48414c4f" | xxd -r -p  

- Dengan newline

 echo -ne "48414c4f0a" | xxd -r -p 

 

 

3. Coba di python
Disini saya menggunakan interpreneur python (ipython). Untuk cara instalasinya bisa dilihat disini

ipython

 

- chr (Menghasilkan karakter dari kode ascii hex)

 chr(0x48) + chr(0x41) + chr(0x4c) + chr(0x4f)  

 

- encode (melihat kode ascii hex dari sebuah string)

"HALO".encode("hex")  

 

- decode (melihat string yang dihasilkan kode ascii hex)

"48414c4f".decode("hex") 

  

- backslash

"\x48\x41\x4c\x4f"


\xNN = 1Byte
NN = 2digit hex

 

4. Tidak semua Byte bisa dijadikan karakter ASCII 

4.1 Printable
(0x20 - 0x79)
(0x2a - 0x2f)
(0x3a - 0x3f)
(0x4a - 0x4f)
(0x5a - 0x5f)
(0x6a - 0x6f)
(0x7a - 0x7e)

4.2 Not Printable 
(0x00 - 0x19)
(0xa - 0xf)
(0x1a - 0x1f)
(0x7f - 0xff)

Yang bisa dijadikan karakter ASCII hanya PRINTABLE

 

4.2.1 MARI BERMAIN dengan Not Printable

"8090ffad1201".decode("hex")


4.2.2 MARI BERMAIN dengan Not Printable (+print) 
 print "8090ffad1201".decode("hex")

Terlihat bahwa string yang tidak jelas muncul dikarenakan saya mencoba memunculkan string dengan bilangan NOT PRINTABLE

4.2.3 Mengambil string random (tanpa encode)
open("/dev/urandom").read(16)

4.2.4 Mengambil string random (dengan encode)
open("/dev/urandom").read(16).encode("hex")

Saya coba decode 
"f47301903a5d1bee34123f4c76997fa7".decode("hex")

Hasil terlihat bahwa string '\xf4s\x01\x90:]\x1b\xee4\x12?Lv\x99\x7f\xa7' merupakan hasil decode dari kode ASCII (hex) "f47301903a5d1bee34123f4c76997fa7"

Untuk membuktikan sekali lagi, saya mencoba untuk encode kembali string tersebut 
"\xf4s\x01\x90:]\x1b\xee4\x12?Lv\x99\x7f\xa7".encode("hex")

Hasilnya cocok :) 

5. URL Encoding

48414c4f  =  %48%41%4c%4f 

48414c4f  = String biasa

%48%41%4c%4f  = URL String

5.1 Import urllib ke python

import urllib


5.1.1 Untuk mengubah kode hex dari ASCII menjadi string, saya melakukan decode URL dengan perintah (unquote)
urllib.unquote("%48%41%4c%4f")


0 komentar:

Posting Komentar