Python中的RFC4648(Base64)实现

Python中的RFC4648(Base64)实现,python,base64,Python,Base64,Python中是否有(“Base16、Base32和Base64数据编码”)的实现? 注意,我特别寻找RFC4648,而不是它的前身。其他脚本语言只要不花费太长时间就可以工作。Python是首选。Python有一个实现RFC 3548(RFC 4648的旧版本)的模块。Ruby在Base64#strict_decode64和Base64#strict_encode64方法中实现RFC 4648 base64还有一个字符串操作数版本: a_str = 'This is a string' a_st

Python中是否有(“Base16、Base32和Base64数据编码”)的实现?
注意,我特别寻找RFC4648,而不是它的前身。其他脚本语言只要不花费太长时间就可以工作。Python是首选。

Python有一个实现RFC 3548(RFC 4648的旧版本)的模块。

Ruby在
Base64#strict_decode64
Base64#strict_encode64
方法中实现RFC 4648

base64还有一个字符串操作数版本:

a_str = 'This is a string'
a_str.encode('base64', 'strict')
'VGhpcyBpcyBhIHN0cmluZw==\n'
它与base64.b64encode的功能相同,但我想我会把它作为一个选项放在那里

补丁:
您需要的是常规base64模块的“扩展十六进制”,我记得不久前我为DNSSEC项目安装了它:

Go标准库有一个非常好的功能(如RFC 4648中所定义)


相关源文件:

在使用

我找不到RFC4648所说的“用扩展十六进制字母进行32进制编码”的python实现;因此,我为python编写了一个:

据我所知,如果使用标准字符映射,RFC3548没有区别,但我无法找到使用扩展十六进制字母表的标准方法


请随意复制粘贴,如果人们认为这是一个合理的解决方案,我将编写一些测试并创建git回购。

问题太广泛(一个问题中有两个问题)。我删除了matlab标记,因为这里已经有两个Python答案。请打开一个关于Matlab实现的新问题。不公平:(Python在这里有更多的观众,因此答案更多。为什么不让OP决定删除哪个标记。我是认真的:)@Amro for you::)@Kay:这是有史以来最好的事情:')而堆栈溢出的人在8位二进制数的情况下是卑鄙的,最后6位数字组始终为零。因此跳过了它,但我在RFC中找不到它。你知道它在哪里吗?对不起,我不太清楚你的意思。你能举个具体的例子吗?没错。使用
=
填充字符,以便解码器可以恢复数据的原始长度。RFC 4648第4节讨论了这一点,在“如果可用位少于24位,则执行特殊处理…”开头的一段中。@EbiDK:是的,这是真的,但这一评论是在我发布此答案将近一年后的今天才添加的。OP可以很好地解释RFC 3548和RFC 4648之间的哪些差异对于这个问题很重要。看看较新的RFC,我的结论是Python base64实现是兼容的。缺少的是32个基本字母。