博客新地址: c7ay.top
Base64是一种用64个字符来表示任意二进制数据的方法。 如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。
b64编解码
b64encode编码 b64decode解码
import base64
encode = base64.b64encode(b'abc\x00binary')
print(encode)
>>>b'YWJjAGJpbmFyeQ=='
decode = base64.b64decode('YWJjAGJpbmFyeQ==')
print(decode)
>>>b'abc\x00binary'
url_safe
标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,"url safe"的base64编码把字符+和/分别变成-和_
import base64
encode = base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(encode)
>>>b'abcd++//'
url_encode = base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
print(url_encode)
>>>b'abcd--__'
CTF中base64的常见应用
循环编码解码
import base64
flag=b'flag{thisisflag}'
for i in range(5):
flag=base64.b64encode(flag)
print(flag)
>>>b'VmpJd2VFNUhSa2RpTTNCclVrVktiMVZxU2pST2JHeFhZVVU1YVZZd2NFbFZiVEF4WWxaV1ZVMUVhejA9'
flag=b'VmpJd2VFNUhSa2RpTTNCclVrVktiMVZxU2pST2JHeFhZVVU1YVZZd2NFbFZiVEF4WWxaV1ZVMUVhejA9'
for i in range(5):
flag=base64.b64decode(flag)
print(flag)
>>>b'flag{thisisflag}'
|