前言

Python提供了“base64”模块用于编码、解码Base64数据。
但是并不是所有的Base64数据都会使用默认的字符表进行编码,所以这里对Python下实现自定义编码字符表解密Base64数据做一个简要记录。(关于Base64内部实现等相关内容可以参考这篇文章

Python2.7

 1 # -*- coding: utf-8
2 import base64
3 import string
4
5 STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
6 CUSTOM_ALPHABET = 'JXaYOjSNTet1dDrHsVlc0m5EknG7Ko6qibhFBuyzQUwxWCp4ZLf23gAvMR8PI9+/'
7 ENCODE_TRANS = string.maketrans(STANDARD_ALPHABET, CUSTOM_ALPHABET)
8 DECODE_TRANS = string.maketrans(CUSTOM_ALPHABET, STANDARD_ALPHABET)
9
10 def encode(input):
11 return base64.b64encode(input).translate(ENCODE_TRANS)
12
13 def decode(input):
14 return base64.b64decode(input.translate(DECODE_TRANS))
15
16 enstr = encode("123")
17 print enstr #dcT2
18
19 destr = decode(enstr)
20 print destr #123

Python3.8

 1 # -*- coding: utf-8
2 import base64
3
4 STANDARD_ALPHABET = b'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
5 CUSTOM_ALPHABET = b'JXaYOjSNTet1dDrHsVlc0m5EknG7Ko6qibhFBuyzQUwxWCp4ZLf23gAvMR8PI9+/'
6 ENCODE_TRANS = bytes.maketrans(STANDARD_ALPHABET, CUSTOM_ALPHABET)
7 DECODE_TRANS = bytes.maketrans(CUSTOM_ALPHABET, STANDARD_ALPHABET)
8
9 def encode(input):
10 return base64.b64encode(input).translate(ENCODE_TRANS)
11
12 def decode(input):
13 return base64.b64decode(input.translate(DECODE_TRANS))
14
15 enstr = encode("123".encode())
16 print(enstr.decode()) #dcT2
17
18 destr = decode(enstr)
19 print(destr.decode()) #123

参考链接:

https://bbs.khcloud.net/?thread-285.htm

【编程】Python3 使用自定义编码字符表解密Base64数据的更多相关文章

  1. base64 换表 解密脚本

    做逆向经常遇到换表的base64 有了py脚本 一切都好说: import base64 import string str1 = "x2dtJEOmyjacxDemx2eczT5cVS9f ...

  2. wordpress 自定义登录表单

    wordpress 有很多插件支持自定义登录表单,本文讨论无插件形式. 自定义登录表单又分为两种 自定义登录表单 在前端创建一个登录页面

  3. WPF ScrollViewer(滚动条) 自定义样式表制作 再发一套样式 细节优化

    艾尼路 出的效果图 本人嵌套 WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂 WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化) 源代码

  4. 如何利用WordPress创建自定义注册表单插件

    来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...

  5. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  6. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

  7. 利用 ajax自定义Form表单的提交方式

    需求场景:有时候单纯的form表单无法向后端传递额外的参数 比如需要action传递js异步生成的参数 ,form表单默认的action就无法满足需求,这时就需要我们自定义form表单的提交方式. h ...

  8. 第四百零六节,自定义用户表类来继承Django的用户表类,

    第四百零六节,自定义用户表类来继承Django的用户表类, models.py from django.db import models # Create your models here. from ...

  9. 看用Tornado如何自定义实现表单验证

    我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单验证功能,但是对于Tornado而言, ...

  10. iOS开发之 AES+Base64数据混合加密与解密

    2016-04-08 09:03 编辑: liubinqww 分类:iOS开发 来源:liubinqww 投稿 4 889     "APP的数据安全已经牵动着我们开发者的心,简单的MD5/ ...

随机推荐

  1. Lombok Requires Annotation Processing

    当你打开一个项目启动的时候报这样的错误 这种错误 打开这个设置

  2. 《Makefile中DEP_LIBRARIES变量的作用》

    1.例子 DEP_LIBRARIES := lib@InfoSDK_api lib@WMTMedia lib@WMTUtil lib@curl 该变量是Makefile里面内置的变量,作用是指定依赖的 ...

  3. go 处理json

    在云原生的相关技术中, 调用 kafka 和 es等中间件,返回的结果大多是 json 格式,因此我们需要频繁的对 json 进行操作. 在go这种强类型的语言中,不同于 python 和 nodej ...

  4. 【小白必经之路:玩转STL】array容器

    此篇随笔将示范array容器的基本操作 1.介绍 array容器在C++普通数组的基础上,添加了一些函数.在使用上,它比普通数组更安全. 2.头文件及命名空间 1 #include<array& ...

  5. git lock fail解决

    本地多个分支,remote .remote tracking.local checkout了2个不同版本分支,发现最后版本却是相同的,然后pull时报git lock fail, 看来发送了冲突了,删 ...

  6. STM32F0使用LL库实现UART接收

    初始化: 1 void MX_USART1_UART_Init(void) 2 { 3 4 /* USER CODE BEGIN USART1_Init 0 */ 5 6 /* USER CODE E ...

  7. Qt excel操作相关

    #include <QDebug> #include <QAxObject> #include <QStandardPaths> #include <QFil ...

  8. Spring事务注意事项 以及 遇到的坑

    原创参考: https://www.cnblogs.com/yougewe/p/7466677.html   (Spring,为内部方法新起一个事务,此处应有坑.) https://blog.csdn ...

  9. 初玩mybatis-Plus踩过的小坑(粗心大意)

    一开始没设置全局id为数据库自增长(数据库也要勾上自增长) 他是默认使用ID_WORKER生成id的 ,然后当我重新设置为自增长后 发现生成的id还是20位数,局部id也设置了 还是没用 ,百度说哪个 ...

  10. gym104076H

    hehezhou 的鬼才神仙题解根本看不懂好吧. 首先判掉 \(n=1\). 然后考虑最后一步,发现只用考虑怎样的左右端点可能见面. 左右和右左构成双射,算出总量减去自己配自己再除 \(2\) 即可. ...