Преобразование целочисленного значения в base64, а затем декодирование его для получения открытого текста - PullRequest
3 голосов
/ 26 марта 2019

Мне присвоено это число 427021005928, которое я должен изменить на строку в кодировке base64, а затем декодировать строку base64 для получения простого текста.

Это десятичное значение 427021005928 при преобразовании в двоичный код дает 110001101101100011011110111010001101000, которыйсоответствует 'Y2xvdGg =', что я и хочу.Получил преобразование из (https://cryptii.com/pipes/binary-to-base64)

И, наконец, я декодирую 'Y2xvdGg =', чтобы получить текстовую ткань.

Моя проблема в том, что у меня нет никакой идеи, как использовать Python для полученияиз десятичного или двоичного значения, чтобы получить 'Y2xvdGg ='

Будет полезна некоторая помощь!

ПРИМЕЧАНИЕ: у меня есть только это значение 427021005928 в начале. Мне нужно получить base64 итекстовые ответы.

Ответы [ 4 ]

3 голосов
/ 26 марта 2019

попробуй

number = 427021005928

encode = base64.b64encode(bytes(number))

decode = base64.b64decode(encodeNumber)
2 голосов
/ 26 марта 2019

Одним из элегантных способов было бы использовать [Python 3]: struct - интерпретировать байты как упакованные двоичные данные , но учитывая тот факт, что числа Python не имеют фиксированного размера, некоторые дополнительные вычисленияпотребуется (например, число 5 байт).

Очевидно, что онлайн-конвертер применил кодирование base64 к представлению памяти числа, котороеможно получить через [Python 3]: int. to_bytes (* длина 1014 *, метеоролог, *, подпись = False ) ( порядковый номер важен, и в этом случае он большой ):

Для обратного процесса требуются обратные шаги.Есть 2 варианта:

  • Вещи, выполняемые вручную (это также может быть применено к процессу «вперед»)
  • Использование 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]: вывод crc32b в PHP не равен Python (ответ @ CristiFati) .

1 голос
/ 26 марта 2019

Попробуйте это (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'
0 голосов
/ 26 марта 2019

Вы можете выполнить следующие преобразования, используя python

Прежде всего импортируйте base64, используя следующий синтаксис

>>> import base64

Для преобразования текста в base64 выполните следующие действия

кодирование * * +1010

>>> base64.b64encode("cloth".encode()).decode()
    'Y2xvdGg='

декодирование

>>> base64.b64decode("Y2xvdGg=".encode()).decode()
    'cloth'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...