# Encoding ||其實以下為我的教課文字檔|| 編碼貌似常被歸在crypto? 但在general skill就很常看到了 算某種CTF的基本知識? 一些奇奇怪怪的編碼就不是很想說了 ||遇到再查|| ## bytes * 表示二進制數據的資料型別 * 在密碼學中,尤其是 RSA 等演算法中,常需在 bytes 與大數(整數)間轉換 py用變數儲存bytes型別 : `b_data = b"hello"` bytes to string : `var1.decode()` string to bytes : `var2.encode("utf-8")` bytes to hex-string : `var3.hex()` hex-string to bytes : `bytes.fromhex(var4)` ### bytes ⇆ integer 將 bytes 轉換為整數 : `int.from_bytes(bytes, byteorder)` 將整數轉換為 bytes : `int.to_bytes(length, byteorder)` byteorder:指定字節序('big' 或 'little') 大端序(Big Endian):數字的高位字節存儲在前面(左邊)。 小端序(Little Endian):數字的低位字節存儲在前面(左邊)。 🌰 ``` py # 收到的 bytes 數據 data = b'\x00\x00\x01\x02' # 解讀成一個整數(假設是大端序) value = int.from_bytes(data, byteorder='big') print(f"解讀的整數值是:{value}") # 輸出:258 # 再轉回 bytes converted = value.to_bytes(4, byteorder='big') print(f"轉換回 bytes:{converted}") # 輸出:b'\x00\x00\x01\x02' ``` 另一種常用於密碼學的方式(預設為big) ``` py from Crypto.Util.number import # 從 Crypto.Util.number 模組中引入所有函數和工具 bytes_to_long() #將位元組序列(bytes)轉換為長整數(long integer) long_to_bytes() #將長整數(long integer)轉換為位元組序列(bytes) ``` ## hex * Hexadecimal,也就是base16 * 轉換為ASCII時,每兩個十六進位數字對應一個ASCII字符 🌰轉換過程: Hexadecimal: 48 65 6C 6C 6F Step-by-Step Conversion: 48 (十六進位) → 72 (十進位) → H (ASCII字符) 65 (十六進位) → 101 (十進位) → e (ASCII字符) 6C (十六進位) → 108 (十進位) → l (ASCII字符) 6C (十六進位) → 108 (十進位) → l (ASCII字符) 6F (十六進位) → 111 (十進位) → o (ASCII字符) Result: 48 65 6C 6C 6F 轉換為 ASCII 為 Hello **用py轉換** `bytes.fromhex() `: 將一個十六進制字符串轉換為 bytes 類型 `.hex() `: 將 bytes 類型的數值轉換為一個十六進制字符串 ## Base16 / Base32 / Base64 把字串轉成數字後依照 base size 去對應 encode 的字母 Base16:0-9 A-F (hex) Base32:2-7 A-Z Base64:0-9 A-Z a-z +/ py要先`import base64` b32加密:`base64.b32encode(var1.encode()).decode()` b32解密:`base64.b32decode(var2.encode()).decode()` b64加密:`base64.b64encode(var3.encode()).decode()` b64解密:`base64.b64decode(var4.encode()).decode()` ⭐ 括號內要是bytes型別 , 此處var皆為string ## ASCII * 全稱為American Standard Code for Information Interchange,美國標準資訊交換碼 * 基於拉丁字母的一套電腦字元編碼標準 * 局限在於只能顯示26個基本拉丁字母、阿拉伯數字和英式標點符號,因此,現在的軟體系統大多採用Unicode **可以用py轉換** `chr(數字)`:ASCII轉字元 `ord(字元)`:字元轉ASCII <div class="sl-block is-focused" data-block-type="image" data-name="image-cbbad2" style="width: 555.465px; height: 368.863px; left: 705.171px; top: 342.416px; min-width: 1px; min-height: 1px;" data-origin-id="78af7b40743062c95cbc903775633bd0"><div class="sl-block-content" style="z-index: 13;"><img class="" data-natural-width="1536" data-natural-height="1020" data-lazy-loaded="" src="https://s3.amazonaws.com/media-p.slid.es/uploads/2705601/images/11966760/pasted-from-clipboard.png"></div></div> ## xor * XOR(Exclusive OR 異或)是一種位元運算,常用於密碼學和資料處理 * XOR 的運算規則是:兩個輸入位相同時,結果為0;兩個輸入位不同時,結果為1 * Commutative (交換率):A ⊕ B = B ⊕ A * Associative (結合率):A ⊕ (B ⊕ C) = (A ⊕ B) ⊕ C * Identity (恆等律):A ⊕ 0 = A * Self-Inverse (自反律):A ⊕ A = 0 * Double Application (雙重應用):如果將相同的數字進行兩次 XOR,會回到原始數值:(A ⊕ B) ⊕ B = A **py內建函式庫:** ``` py from pwn import xor result=xor('label',13) #使用pwn.xor會得到bytes型別的結果 ``` ## Morse Code * 一種時通時斷的訊號代碼,通過不同的排列順序來表達不同的英文字母、數字和標點符號 * 長度與字元出現的頻率成反比 解碼: [文字](https://morsecode.world/international/translator.html) [音檔](https://databorder.com/transfer/morse-sound-receiver/) <div class="sl-block is-focused" data-block-type="image" data-name="image-bc0c54" style="width: 436.687px; height: 532.826px; left: 843.313px; top: 187.174px; min-width: 1px; min-height: 1px;" data-origin-id="f3a8f02a953b073ac3ca787d5e07db0d"><div class="sl-block-content" style="z-index: 14;"><img class="" data-natural-width="473" data-natural-height="610" data-crop-x="0" data-crop-y="0" data-crop-width="1" data-crop-height="0.946121" style="left: 0px; top: 0px; width: 437px; height: 563px;" data-lazy-loaded="" src="https://s3.amazonaws.com/media-p.slid.es/uploads/2705601/images/11994784/pasted-from-clipboard.png"></div></div> # 參考資料 [ASCII vs. Unicode: A full tutorial](https://spectralops.io/blog/ascii-vs-unicode-a-full-tutorial/) [密碼學小白的學習之路 系列](https://ithelp.ithome.com.tw/m/users/20168165/ironman/7247) [資安小白的密碼學從0到1-CryptoHack平台解題紀錄 系列](https://ithelp.ithome.com.tw/users/20162613/ironman/6498) [SCIST Week 3 (11/16) & Week 4 (11/30) - Crypto](https://hackmd.io/@SCIST/S5_ALL/https%3A%2F%2Fhackmd.io%2F%40SCIST%2FH1wdVfEbyl)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up