将整数值转换为base64,然后对其进行解码以获得明文

2024-09-30 14:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我要把这个字符串改成base64,然后把它改成一个base64。在

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

最后我解码'Y2xvdGg='得到文本布料。在

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

如果有人帮忙,我将不胜感激!在

注意:开始时我只有这个值427021005928。我需要得到base64和明文的答案。在


Tags: to字符串答案https文本com二进制解码
3条回答

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

显然,在线转换器对数字的内存表示应用了base64编码,可以通过[Python 3]: int.to_bytes(length, byteorder, *, signed=False)endianness很重要,在这种情况下,big):

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

  • 手动完成的事情(这也可以应用于“转发”过程)
  • 使用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)。在

试试看

number = 427021005928

encode = base64.b64encode(bytes(number))

decode = base64.b64decode(encodeNumber)

试试这个(https://docs.python.org/3/library/stdtypes.html#int.to_bytes

>>> import base64
>>> x=427021005928
>>> y=x.to_bytes(5,byteorder='big').decode('utf-8')
>>> base64.b64encode(y.encode()).decode()
'Y2xvdGg='
>>> y
'cloth'

相关问题 更多 >