【问题标题】:Fixed-digit base64 encode and decode in PythonPython中的固定数字base64编码和解码
【发布时间】:2012-01-13 20:32:37
【问题描述】:

我正在尝试对 base64 字符串进行编码和解码。它正常工作,但如果我尝试将哈希限制为 6 位,我会在解码时收到错误:

from base64 import b64encode
from base64 import b64decode

s="something"

base 64 编码/解码:

# Encode:
hash = b64encode(s)
# Decode:
dehash = b64decode(hash)
print dehash

(作品)

6 位 base 64 编码/解码:

# Encode:
hash = b64encode(s)[:6]
# Decode:
dehash = b64decode(hash)
print dehash

TypeError: 不正确的填充

我做错了什么?


更新:

根据 Mark 的回答,我在 6 位哈希中添加了填充,使其可被 4 整除:

hash = hash += "=="

但现在解码结果 = "some"

更新 2

哇,这太愚蠢了..

【问题讨论】:

  • 为什么更新后的结果让你大吃一惊?您是否希望以某种神奇/分形的方式将整个原始字符串编码为 6 个字节?
  • 哦,我是个白痴 - 试图将较长的字符串编码为较短的散列......抱歉浪费了你们的时间

标签: python base64


【解决方案1】:

根据定义,如果 Base64 在输出上未解码为整数字节,则需要在输入上进行填充。每 4 个 base64 字符变成 3 个字节。您的输入长度没有除以 4,因此出现错误。

Wikipedia 很好地描述了 Base64 的细节。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多