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'