Python语言base64加解密简单应用

首先,我们先了解一下base家族加解密的方式:

ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式

base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式

base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式

base16就是用16(2的4次方)个字符,对二进制数据进行编码的方式

这里举一个百度百科里base64的例子(base原理可以自己问一下度娘~&*&)

 

转码过程例子:

3*8=4*6

内存1个字节占8位

转前: s 1 3

先转成ascii:对应 115 49 51

2进制: 01110011 00110001 00110011

6个一组(4组) 011100110011000100110011

然后才有后面的 011100 110011 000100 110011

然后计算机是8位8位的存数 6不够,自动就补两个高位0了

所有有了 高位补0

科学计算器输入 00011100 00110011 00000100 00110011

得到 28 51 4 51

查对下照表 c z E z

 

在Python中使用base64库 

加密程序: 

​
#Python3.6

from base64 import *
import random
basecode={
    '16':lambda x:b16encode(x),
    '32':lambda x:b32encode(x),
    '64':lambda x:b64encode(x)
    } #定义一个字典函数(三个关键字)

flag=input('Please input a string:').encode()
#注意要加 encode();input()输入的是字符串;而base加解密函数要接受byte类型

i=0
while(i<10):  #用三种加密函数随机加密10次
    order=random.choice(['16','32','64']) 
    flag=basecode[order](flag)
    i+=1
    
with open("text.txt",'w') as fp:
    fp.write(flag.decode())



​

这段程序对要加密的字符串用base64\base32\base16 的三种加密函数进行随机加密。

加密效果

Python语言base64加解密简单应用_第1张图片

 

 

解密程序

​
#Python3.6

from base64 import *
import binascii

'''因为对用base64加密的数据用base32或base16解密几乎是不可能成功的,同base32;
    所以依次尝试使用base16、base32、base64进行解密'''


def decode_fun(code):
    try:
        decode=b16decode(code)
        return decode
    except binascii.Error:
        pass

    try:
        decode=b32decode(code)
        return decode
    except binascii.Error:
        pass

    try:
        decode=b64decode(code)
        return decode
    except binascii.Error:
        pass

def main():
    with open('text.txt','r') as fp:
        code=fp.read().encode()
    i=0
    while(i<10):
        code=decode_fun(code)
        i+=1
    print('The string is:'+ code.decode())

if __name__ == '__main__':
    main()



​

解密效果:成功得到原文

Python语言base64加解密简单应用_第2张图片

注意:这两个程序都是在3.6环境下使用的,要注意encode(),和decode()进行字符串和字节类型的转换。

 

你可能感兴趣的:(Python,密码学)