base64原理
base64一共64个字符 A-Z a-z 0-9 + / 还有一个 = 作为补位符
这些字符用 二进制 的 0 - 63 来表示
import base64
base64.b16encode(b‘a‘) 加密 python3 为bytes型 返回bytes python2 bytes和str都行 返回str型
base16 = base64.b16decode(‘E68891E79C9FE5B885‘) 解密
print(base16.decode(‘utf-8‘)) 解密结果为 bytes 需要转为字符串
base32
import base64
base64.b32encode(b‘123‘) 加密 python3 为bytes型 返回bytes python2 bytes和str都行 返回str型
base32 = base64.b32decode(‘K5UHSIDBNUQESIDTN4QGQYLOMRZW63LF‘).decode(‘utf-8‘) 结果也是bytes 加个.decode(‘utf-8‘)让执行结果直接转字符串
import base36
base36.loads(b‘aaa‘) 加密 可以用bytes或str 返回结果均为int python3和2 都一样
base36.dumps(13330) 解密 只能用int型
import base58
print(base58.b58encode(‘aaa‘)) python3 加解密都返回bytes python2 均返回 str python2和3 加密和解密 都可以用 bytes或str 类型的数据 不影响结果
print(base58.b58decode(b‘Zi88‘))
import base64
base64.b64encode(b‘a‘) base64 加密
base64.b64decode(‘5oiR5pyA5biF‘) 解密 结果为 bytes 需要转为字符串
python3 中 由于编码问题 只能加密 字节型 不能用字符串型 解密可以用字符串或字节型
#字符串 -> byte
‘a‘.encode(‘utf-8‘) #或
bytes(‘a‘,encoding="utf8")
#byte -> 字符串
b‘a‘.decode(‘utf-8‘) #或
str(b‘a‘,encoding="utf8")
import base64
base64.b85encode(b‘aaa‘) 加密 python3中 使用bytes
base85 = base64.b85decode(‘S7>=4VQnBuAaidZXkl(-b8l^B‘).decode(‘utf-8‘) 解密 结果为 bytes 需要转为字符串 加个.decode(‘utf-8‘)让执行结果直接转字符串
import base64
base64.a85encode(b‘aaa‘) 加密 python3中 使用bytes
base64.a85decode(b‘@:<R‘) 解密 结果为 bytes 需要转为字符串 将使用Ascii85字母的二进制字符串解码为正常形式
import base91
base91.encode(b‘a‘) python3中 只能加密 bytes格式 python2 中可以是字符串
base91.decode(‘GB‘) python3中会返回 bytearray(b‘a‘) python2 返回 bytearray型 a
目前 base92 模块 未更新 只支持python2
import base92
print base92.encode(‘aaaaa‘) 加密
print base92.decode(‘D81RPyB‘) 解密
import py3base92
py3base92.encode(‘aaa‘) 加密 可以用bytes 或 str 返回str
py3base92.decode(‘D81Q‘) 解密 只能用str不能用bytes 返回str
base64code = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/‘
basebin = []
for i in open(‘X:\\2.txt‘,‘r‘): #base文件的地址
i = i.replace(‘\n‘,‘‘)
if ‘==‘ in i: #如果最后是两个‘=’,说明有四位隐写位,将倒数第三个字符转化为对应的二进制索引,然后取后四位
a = i[-3:-2]
basebin.append(str(bin(base64code.index(a))).replace(‘0b‘, ‘‘)[-4:])
elif ‘=‘ in i: #如果最后是一个‘=’,说明有两位隐写位,将倒数第二个字符转化为对应的二进制索引,然后取后两位。
a = i[-2:-1]
basebin.append(str(bin(base64code.index(a))).replace(‘0b‘, ‘‘)[-2:])
else:
pass
basestr = ‘‘
for i in basebin: #将列表里的二进制 合并到一个字符串里
basestr += i
for i in range(0, len(basestr) + 1, 8):
print(chr(int(str(basestr[i : i+8]),2)),end=‘‘) #输出
#author:羽
import base64
import base91
import base58
import py3base92
def hex_to_str(s):
k=‘‘
for i in range(0,len(s),2):
j = s[i]+s[i+1]
k+=chr(int(j,16))
print(‘16‘)
return k
def ba32(s):
s = base64.b32decode(s)
s = bytes.decode(s)
print(‘32‘)
return s
def ba58(s):
s = base58.b58decode(s)
s = bytes.decode(s)
print(‘58‘)
return s
def ba64(s):
s = base64.b64decode(s)
s = bytes.decode(s)
print(‘64‘)
return s
def baa85(s):
s = base64.a85decode(s)
s = bytes.decode(s)
print(‘a85‘)
return s
def bab85(s):
s = base64.b85decode(s)
s = bytes.decode(s)
print(‘b85‘)
return s
def ba91(s):
s = base91.decode(s)
s = s.decode()
print(‘91‘)
return s
def ba92(s):
s = py3base92.decode(s)
print(‘91‘)
return s
def start(s):
for i in range(50):
if len(s)<50:
print(s)
try:
s=hex_to_str(s)
except:
try:
s=ba32(s)
except:
try:
s=ba58(s)
except:
try:
s=ba64(s)
except:
try:
s = baa85(s)
except:
try:
s=bab85(s)
except:
print(‘nonono‘)
import base64
s=‘TkVLTFdUQVpvUlNda1ZXRUpAZVldTltgJCQhLCAgGSknPjc=‘
s=base64.b64decode(s)
for i in range(256):
flag=""
k=0
for j in s:
res=j^(k+i)
flag+=chr(res)
k+=1
参考:
https://blog.csdn.net/miuzzx/article/details/104790902
https://www.tr0y.wang/2017/06/14/Base64steg/
原文:https://www.cnblogs.com/ZhouJiaHao/p/14512711.html