base64加密和解密有点头疼,必须要记录下来,以后忘了也能再来复习下
当然啦,能一直记住是最好的…加油吧,少年(其实已经好老了)
win10,python3
这个还是别人讲的好,详情请看:Base64编码原理与应用
其实它的原理不是很难,以下是几个小案例
import base64
str='admin'
str=str.encode('utf-8')
#加密
bs64=base64.b64encode(str)
print(bs)
#结果是 b'YWRtaW4='
bs32=base64.b32encode(str)
print(bs32)
#结果是 b'MFSG22LO'
bs16=base64.b16encode(str)
print(bs16)
#结果是 b'61646D696E'
#解密
debs64=base64.b64decode(bs64)
print(debs64)
#结果是 b'admin'
debs32=base64.b32decode(bs32)
print(debs32)
#结果是 b'admin'
debs16=base64.b16decode(bs16)
print(debs16)
#结果是 b'admin'
请看代码:
import base64
import random
#flag="flag{**some seclet**}"
#base64加密
def base64_encode(flag):
#定义编码方式
basecode={
'16':lambda x:base64.b16encode(x),
'32':lambda x:base64.b32encode(x),
'64':lambda x:base64.b64encode(x)
}
#将‘str’类型转换成‘bytes’类型
pp=flag.encode('utf-8')
#进行循环编码
for i in range(10):
order=random.choice(['16','32','64'])
pp=basecode[order](pp)
#将‘bytes’类型转换成‘str’类型
pp=pp.decode('utf-8')
#写入文件中
with open("ciphertext.txt",'w') as fp:
fp.write(pp)
return '###加密成功###'
#base64解密
def base64_decode(ciphertext):
result=''
with open(ciphertext+".txt",'r') as fp:
ciphertext=fp.read()
ciphertext=ciphertext.encode('utf-8')
#定义解密方式
basedecode={
'16':lambda x:base64.b16decode(x),
'32':lambda x:base64.b32decode(x),
'64':lambda x:base64.b64decode(x)
}
for j in range(10):
try:
ciphertext=basedecode['16'](ciphertext)
except:
try:
ciphertext=basedecode['32'](ciphertext)
except:
ciphertext=basedecode['64'](ciphertext)
result=ciphertext.decode('utf-8')
print(result)
return '###解密成功###'
def main():
functions=input('输入A加密,输入B解密,其它关闭>>>')
if functions=='A':
plaintext=input('请输入加密文字明文>>>')
print(base64_encode(plaintext))
if functions=='B':
ciphertext = input('请输入密文文件名>>>')
print(base64_decode(ciphertext))
if __name__=='__main__':
main()
runfile('C:/Users/lenovo/Documents/我的python笔记/作业4.py', wdir='C:/Users/lenovo/Documents/我的python笔记')
输入A加密,输入B解密,其它关闭>>>>A
请输入加密文字明文>>>abcdefg
###加密成功###
runfile('C:/Users/lenovo/Documents/我的python笔记/作业4.py', wdir='C:/Users/lenovo/Documents/我的python笔记')
输入A加密,输入B解密,其它关闭>>>>B
请输入密文文件名>>>ciphertext
abcdefg
###解密成功###
在解码的时候,由于加密的时候是随机加密的,随意该怎么用正确的解码方式去解码就成了关键。
这里找了"try…except…"的语句去实现,一个一个方式去试,最终试出明文。