我正在尝试用Python编写一个简短的程序,将字符串从十六进制转换为字节,然后从字节转换为base64。我有一个十六进制的基本字符串,相当于base64中的字符串。该计划如下:
import codecs
basecode = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
DesiredResult = "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t"
e = codecs.decode(basecode, 'hex')
print(e)
y = codecs.encode(e, 'base64')
print(y)
z = bytes.decode(y, 'utf-8')
print(z)
print(DesiredResult)
if y == DesiredResult:
print("Success!")
我从程序中得到的输出如下:
b"I'm killing your brain like a poisonous mushroom"
b'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
我相信你可以想象,这是令人沮丧的,因为这意味着当我走近时,我实际上并没有完成我的目标。
那么,如何修改此程序以确保转换的输出与变量DesiredResult
完全相同?
我知道它与转换中出现的\n
有关,但我不知道它是如何实现的,我不知道如何摆脱它。
任何和所有建议都非常感谢。
答案 0 :(得分:0)
base64 codec总是在末尾添加\n
个字节。
将操作数转换为MIME base64(结果始终包含尾随'\ n')
要删除最后一个\n
字节,请使用Python slicing operator,如下所示:
>>> y
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
>>> DesiredResult
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1]
'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t'
>>> y[:-1] == DesiredResult
True