Base64解码转整数再编码后输出与原串不符的问题求助
问题:Base64重新编码后无法还原原串(得到
Gcmtbw==而非Gcmtb8==) 问题分析
你的代码存在两个关键问题:
- 强制指定
int.to_bytes的字节长度为4,若原解码后的字节串长度不是4,会导致生成的字节串与原数据偏差; - 使用
base64.urlsafe_b64encode编码,但原串是标准Base64格式,不符合原编码逻辑。
另外从输出看,b'\x19\xc9\xado'的标准Base64编码结果本身就是Gcmtbw==,说明你误解了原Base64串与字节数据的对应关系——Gcmtb8==解码后应该是另一段字节数据,而非当前的b'\x19\xc9\xado'。
解决方案
- 动态匹配字节长度:将
int.to_bytes的长度参数改为原字节串的长度,避免固定长度导致的数据错误; - 使用标准Base64编码:原串是标准Base64格式,应使用
base64.b64encode而非urlsafe版本。
修正后的代码
import base64 # 解码原Base64串,validate=False允许非标准长度的Base64串 byte = base64.b64decode(b'Gcmtb8==', validate=False) # 字节转整数 Number = int.from_bytes(byte, byteorder="big") # 整数转回字节,匹配原字节串长度 Decoded = int.to_bytes(Number, length=len(byte), byteorder="big") # 使用标准Base64编码还原 encode = base64.b64encode(Decoded) print(""" Test 1 Decoded to byte: {} Number from byte: {} Byte from number: {} Output: {} """.format(byte, Number, Decoded, encode))
验证说明
- 若原Base64串
Gcmtb8==格式有效,解码后经上述步骤重新编码会准确还原为原串; - 若原串存在长度非4倍数的格式问题,
validate=False可临时允许解码,但建议优先使用符合Base64规范的串(长度为4的整数倍)。
内容的提问来源于stack exchange,提问作者Mithian
相关产品推荐
相关产品推荐

