Python 将字符串转换为字节

Python 将字符串转换为字节,python,python-3.x,shell,Python,Python 3.x,Shell,我有一个文件具有以下格式: 用户名 密码(base64编码) id 我必须读取此密码(base64编码)并对其进行解码,将其作为密码中的参数传递以进行身份验证。 问题是,当我读取这个密码时,它被读取为字符串,当我尝试解码时,我得到一个错误,因为这应该是字节 def getSecret(self): home = expanduser("~/.user/credentials") with open(home,"r") as file: self.password

我有一个文件具有以下格式:

用户名
密码(base64编码)
id

我必须读取此密码(base64编码)并对其进行解码,将其作为密码中的参数传递以进行身份验证。 问题是,当我读取这个密码时,它被读取为字符串,当我尝试解码时,我得到一个错误,因为这应该是字节

def getSecret(self):
    home = expanduser("~/.user/credentials")
    with open(home,"r") as file:
        self.password = list(file)[1]
        self.password = base64.b64decode(self.password)

        return self.password


conn = User()
decode = base64.b64decode(conn.getSecret())
print(decode)
但这是返回一个字符串,应该是字节,当我试图解码它时,我得到了这个错误

return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
我如何阅读和解码这个


谢谢。

您有一个Python
字符串要解码:

>>> password_b64='c2VjcmV0\n'
binascii.a2b_base64
函数将执行此操作(注意:
a2b
):

但是它返回一个
字节
对象,而不是
字符串
对象。所以你必须以某种方式解码字节。最明显的方法是假设它们是UTF-8, 并对生成的
字节调用
.decode(encoding)
方法:

>>> binascii.a2b_base64(password_b64).decode("utf-8")
'secret'

我发现了问题,只需从字符串中删除b'',一切都正常。
非常感谢大家。

字符串中是否有换行符或其他空格字符?打印出来(给你自己!),周围有几个字母:
Print(“X{}X.format(password_b64))
并检查是否有多余的字符。为什么密码base 64是编码的?这基本上与纯文本相同。
getSecret()
返回解码后的base 64字符串,然后看起来您正在尝试再次解码。我得到了base64编码字符串的长度,当我从文件中读取相同字符串时,它们的大小不同。如果我输入编码字符串,我得到的大小是12,但当我从文件中读取字符串时,我得到的大小是15。我用strip删除了所有空格,但无法获得匹配的大小。假设这是我的编码字符串打印(len(b'dhisdjflisdfsdifjsdif'))=12,如果我读取它,我得到15。为什么会这样?没有空间了。
>>> binascii.a2b_base64(password_b64).decode("utf-8")
'secret'