将Hex转换为Base64 Python时出现编码错误

时间:2016-03-30 02:06:05

标签: python encoding

我目前正在开始python,并编写一个程序,它将转换给定的长十六进制数字串,应该分成对。我很难利用pythons编码功能。

到目前为止,我有:

import base64

def splitByTwo(str):
    return [i+j for i,j in zip(list(str)[::2], list(str)[1::2])]

def bytesToBase64(str):
    b64List = []
    stringsByTwo = splitByTwo(str.upper())
    for x in stringsByTwo:
        b64List.insert(stringsByTwo.index(x), base64.b16decode(x))
    return b64List

print(bytesToBase64("49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"))

我可以打印[b'I', b"'", b'm', b'm', b'm', b' ', b' ',.....],但我不确定我对bytesToBase64()方法的base64部分的编码/解码有什么问题。

1 个答案:

答案 0 :(得分:2)

您的bytesToBase64函数返回给定十六进制字符串表示的字节列表(由于您使用了insert而不是append而略微乱码)。你还没有完成base64编码部分。

修复现有功能:

def bytesToBase64(str):
    b64List = []
    stringsByTwo = splitByTwo(str.upper())
    for x in stringsByTwo:
        b64List.append(base64.b16decode(x))
    print base64.b64encode("".join(b64List))

但这个功能不是很惯用。要完全重写它:

def bytesToBase64(s):
    return base64.b64encode(binascii.unhexlify(s))