Base 64从原始二进制解码

时间:2015-12-21 17:28:54

标签: python base64

我正在尝试从原始二进制文件中解码base64:

作为输入,我有4个6位值

010000 001010 000000 011001

我转换为十进制,给出

16 10 0 25

最后使用base 64表解码,给出

Q K A Z

这被证实是正确的结果。

我想使用Python的base64模块自动执行此操作,但使用

import base64
base64.b64decode( bytearray([16,10,0,25]) )

返回一个空字符串。

在给定输入下使用此库的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

[16, 10, 0, 25]不是base64字符串,真的;我不认为base64具有将base64字母表的数字表示转换为字母表示的任何功能。不过,推出自己的东西并不难:

def to_characters(numeric_arr):
    target = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + b'abcdefghijklmnopqrstuvwxyz' + b'0123456789' + b'+/'
    return bytes(target[n] for n in numeric_arr)

然后:

>>> to_characters(bytearray([16, 10, 0, 25]))
b'QKAZ'
>>> to_characters([16, 10, 0, 25]) # <- or just this
b'QKAZ'

您现在可以将此bytes对象传递给base64.b64decode

>>> base64.b64decode(b'QKAZ')
b'@\xa0\x19'

(请注意,您在使用bytearray的示例中遇到了语法问题 - 请勿执行bytearray[...];执行bytearray([...]) .Python不使用C-比如int array[size]语法。)