統整內容為進制轉換、資料型別、base64編碼實作
-----
如果為n進制,代表以n為底,如數字到n便要進位
進制 | 英文 | 前綴(辨識) | 例子 |
---|---|---|---|
十進位 | Decimal | 無 | 8745 |
二進位 | Binary | 0b | (0b)10001000101001 |
八進位 | octal | 0o | (0o)21051 |
十六進位 | hex | 0x | (0x)2229 |
-----
a = 8745
print("Dec : ", a)
print("Bin : ", bin(a)) # Dec to Bin
print("Oct : ", oct(a)) # Dec to Oct
print("Hex : ", hex(a)) # Dec to Hex
-----
a = 0b10001000101001
b = 0o21051
c = 0x2229
print("Dec : ", int(a)) # Bin to Dec
print("Dec : ", int(b)) # Oct to Dec
print("Dec : ", int(c)) # Hex to Dec
-----
資料型別 | 中文 | 例子 |
---|---|---|
int | 整數 | 78763 |
str | 字串 | "78763" |
bytes | 字節 | b'\x013\xab' |
-----
from Crypto.Util.number import *
-----
from Crypto.Util.number import *
a = 78763
print(str(a)) # int to str
print(type(str(a)))
print(long_to_bytes(a)) # int to bytes
print(type(long_to_bytes(a)))
-----
from Crypto.Util.number import *
a = "78763"
b = b'\x013\xab'
print(int(a)) # str to int
print(type(int(a)))
print(bytes_to_long(b)) # bytes to int
print(type(bytes_to_long(b)))
-----
一張圖解釋!
str = '早安Zer0Cat'
str_bytes = str.encode() # str to bytes
print("str :", str)
print("bytes :", str_bytes)
print("str :", str_bytes.decode()) #bytes to str
-----
str = "Hello"
bytes_str = str.encode()# str to bytes
print("bytes :", bytes_str)
###
print("hex :", bytes_str.hex())# bytes to hex
hex_str = bytes_str.hex()
print("bytes :", bytes.fromhex(hex_str))# hex to bytes
-----
有點抽象對吧,沒4,來個栗子!
str = "Man"
for i in str :
print(f"{i} bin : {bin(ord(i))}")
一個英文字母 = 1 bytes = 8 bit ,Man = 3bytes = 24bit,所以應該要有24個數字,把剛剛的output接在一起驗證看看!
真的是24個!接下來要以6bit為單位,來得出索引,之後去對應表便可成功編碼
chr_1 = "010011"
chr_2 = "010110"
chr_3 = "000101"
chr_4 = "101110"
print("1. ", int(chr_1, 2))
print("2. ", int(chr_2, 2))
print("3. ", int(chr_3, 2))
print("4. ", int(chr_4, 2))
可得此表格
利用索引值去對應base64 table
成功編碼!
不過我們還是來使用python驗證一下(使用base64.b64encode())
import base64
str = b"Man"
print("base64 :", base64.b64encode(str))
正確無誤!
恩…好像還少了一點什麼......阿!如果不是剛好3bytes怎麼辦,什麼是補0?好,我們再來個栗子!
目標 : 把”A” Base64編碼
最後可得此圖,紅色0就是補0的意思,因為是以3bytes為單位,所以後面雖然沒有資料,但還是要是0,且編碼後為”=”
編碼結果可得QQ==
以防萬一,再來驗證一次!這次我們使用線上工具( https://www.base64encode.org/ ), 結果與我們編碼出來的相同( •̀ ω •́ )✧
-----
會把網址列的一些符號用%表示
https://ithelp.ithome.com.tw/ 編碼後會變成
https%3A%2F%2Fithelp.ithome.com.tw%2F
-----
一個超酷,又有趣的編碼XD
針對JavaScript的編碼方式
線上工具 : https://utf-8.jp/public/aaencode.html
超可愛啦 //´∇`/
-----
今天統整了昨天所學,且去認識到其他的編碼方式,明天會繼續往下解題,進入XOR的領域!
-----