我是靠谱客的博主 美满红牛,最近开发中收集的这篇文章主要介绍base64编码解码的函数实现(Python),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Python中有自带的base64解码编码库。在学习CTF编码解码中,为了深入了解base64编码解码的实现原理,尝试动手编码对应的函数。
如下函数经过实际验证。

编码过程中的错误积累

#
列表字符串函数使用index函数寻找无果后不会返回-1 直接报错
2022年4月17日
#
ValueError: substring not found
cipher = 'SG9uZ0ZlaQ=='
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(letters.index('='))
plain_text_input = "Yinxue"
#
输出编码后密文
WWlueHVl
print(base64_encode(plain_text_input))
#
加密再解密,输出明文
print(base64_decode(base64_encode(plain_text_input)))
def base64_decode(cipher_input):
# 定义64个字母字符串
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
# 接收base64密文输入
cipher = cipher_input
# 计算密文中=号数量
number_cut = cipher.count('=')
# 逐个输出密文在letters字符串中序号二进制码
ascii_64 = ['{:0>6}'.format(bin(letters.index(i)).replace('0b', '')) for i in cipher if i != '=']
# 补充=号对应的二进制字节
ascii_string = ''.join(ascii_64) + '0' * 6 * number_cut
#
按照8字节一组计算十进制后求出对应的ascii码字符
ascii_8 = [chr(int(ascii_string[x:x + 8], 2)) for x in range(0, len(ascii_string), 8)]
#
返回明文字符串
plain_text = ''.join(ascii_8[0:len(ascii_8) - number_cut])
return plain_text
def base64_encode(input_str):
#
定义Base64编码的64个字符
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
#
接收明文字符
input_string = input_str
#
逐个计算明文字符ascii值的二进制码,每8个一组生成二进制码列表
ascii_input_string = ['{:0>8}'.format(str(bin(ord(i))).replace('0b', '')) for i in input_string]
# 上述列表每3个8比特二进制为一组,最后一组不足3个8字节,用0补齐
number = 0
output_string = ''
while ascii_input_string:
# 自左向右三个一组编排
ascii_temp = ascii_input_string[:3]
# 最后一组不足三字节的补齐
while len(ascii_temp) < 3:
ascii_temp.append('0' * 8)
number += 1
#
生成24比特字符串
ascii_24 = ''.join(ascii_temp)
#
24个比特均分为4组
ascii_to_6 = [ascii_24[x: x + 6] for x in range(0, 24, 6)]
#
生成包含3个十进制数字的列表
ascii_to_10 = [int(i, 2) for i in ascii_to_6]
#
根据letters字符串输出上述列表值对应字符
ascii_to_64 = [letters[i] for i in ascii_to_10]
#
剔除人为补齐的字符
ascii_to_64 = ascii_to_64[0:4 - number]
ascii_to_64 = ''.join(ascii_to_64)
#
不足部分用=号补齐
ascii_to_64 = ascii_to_64 + "=" * number
#
逐步累加生成密文
output_string += ascii_to_64
#
开始下一个3字节转换
ascii_input_string = ascii_input_string[3:]
#
输出密文
return output_string

最后

以上就是美满红牛为你收集整理的base64编码解码的函数实现(Python)的全部内容,希望文章能够帮你解决base64编码解码的函数实现(Python)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部