就從頭開始吧 第一題 (ASCII) 一道簡單的ASCII碼轉換,直接用題目的提示代碼解就行了 ascii=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, ...
就從頭開始吧
第一題 (ASCII)
一道簡單的ASCII碼轉換,直接用題目的提示代碼解就行了
ascii=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]
flag=""
for i in ascii:
flag+=chr(i)
print(flag)
第二題(Hex)
Hex編碼的原理就是將原來8位的二進位位元組打斷,分成兩個4位的,並且在前面加上4個零,進行補位這樣一個8位二進位位元組就變成了2個8位的二進位位元組,在將新得到的2個二進位字元進行16位進位轉換得到的新的16位字元串就是Hex的值。
hex編碼就是16進位編碼,是字元的[ascii碼](https://so.csdn.net/so/search?q=ascii碼&spm=1001.2101.3001.7020)值的16進位表示,所以解碼時一般先轉為ascii碼,後轉為字元串形式。
代碼如下:
import binascii
hex ='63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d'
print(bytes.fromhex(hex))
print(binascii.a2b_hex(hex))
或者
from Crypto.Util.number import *
import libnum
hex =0x63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d
print(libnum.n2s(int(hex)))##註意,libnum庫中將16進位轉字元串時,必須轉為int類型,不然會報錯
print(long_to_bytes(hex))
像這題題,可以應用python的很多庫,如libnum庫,binascii庫,等等。
第三題(base64)
代碼如下:
import base64
from Crypto.Util.number import *
hex =0x72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf
base = long_to_bytes(hex)
flag=base64.b64encode(base)
print(flag)
先解16進位碼為位元組,然後再解base64
第四題
密文:11515195063862318899931685488813747395775516287289682636499965282714637259206269
代碼如下:
from Crypto.Util.number import *
import libnum
s = 11515195063862318899931685488813747395775516287289682636499965282714637259206269
print(long_to_bytes(s))
print(libnum.n2s(s))