gpt4 book ai didi

python - 将一个Integer值转换为base64,然后解码得到明文

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:10 25 4
gpt4 key购买 nike

我得到这个数字 427021005928,我应该将其更改为 base64 编码的字符串,然后解码 base64 字符串以获得纯文本。

这个十进制值 427021005928 转换为二进制后得到 110001101101100011011110111010001101000,对应于“Y2xvdGg=”,这正是我想要的。从 ( https://cryptii.com/pipes/binary-to-base64 ) 获得转换

最后我解码“Y2xvdGg=”以获取文本布。

我的问题是我不知道如何使用 Python 从十进制或二进制值中获取 'Y2xvdGg='

一些帮助将不胜感激!

注意:我一开始只有这个值 427021005928。我需要获得 base64 和明文答案。

最佳答案

一种优雅的方式是使用 [Python 3]: struct - Interpret bytes as packed binary data ,但考虑到 Python 数字不是固定大小的事实,将需要一些额外的计算(例如,数字是 5 字节长)。

显然,在线转换器对数字的内存表示应用了base64 编码,可以通过[Python 3]: int.to_bytes(length, byteorder, *, signed=False) 获得。 (字节顺序很重要,在本例中它):

对于反向过程,需要反向步骤。有两种选择:

  • 手动完成的事情(这也可以应用于“转发”过程)
  • 使用 int.from_bytes
>>> import base64
>>>
>>> number = 427021005928
>>>
>>> number_bytes = number.to_bytes((number.bit_length() + 7) // 8, byteorder="big") # Here's where the magic happens
>>> number_bytes, number_bytes.decode()
(b'cloth', 'cloth')
>>>
>>> encoded = base64.b64encode(number_bytes)
>>> encoded, encoded.decode() # Don't let yourself tricked by the variable and method names resemblance
(b'Y2xvdGg=', 'Y2xvdGg=')
>>>
>>> # Now, getting the number back
...
>>> decoded = base64.b64decode(encoded)
>>> decoded
b'cloth'
>>>
>>> final_number0 = sum((item * 256 ** idx for idx, item in enumerate(reversed(decoded))))
>>> final_number0
427021005928
>>> number == final_number0
True
>>>
>>> # OR using from_bytes
...
>>> final_number1 = int.from_bytes(decoded, byteorder="big")
>>> final_number1
427021005928
>>> final_number1 == number
True

有关按位运算的更多详细信息,请查看 [SO]: Output of crc32b in PHP is not equal to Python (@CristiFati's answer) .

关于python - 将一个Integer值转换为base64,然后解码得到明文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com