Самый эффективный способ хранения данных base64 в Python? - PullRequest
3 голосов
/ 07 августа 2010

Предположим, у вас есть хеш MD5, закодированный в base64.Тогда каждому символу требуется всего 6 бит для хранения каждого символа в результирующей 22-байтовой строке (исключая окончание '==').Таким образом, каждый хэш base64 md5 может быть уменьшен до 6 * 22 = 132 бит, что требует на 25% меньше места в памяти по сравнению с исходной строкой 8 * 22 = 176 бит.позволяет хранить данные base64 способом, описанным выше?

Ответы [ 4 ]

7 голосов
/ 07 августа 2010

Самый эффективный способ хранения данных, закодированных в base64, - это их декодирование и сохранение в двоичном виде.base64 является транспортной кодировкой - нет смысла хранить в ней данные, особенно в памяти, если только у вас нет веской причины.

Кроме того, придирка: вывод хеш-функции не является шестнадцатеричной строкой -просто общее представление.Выходные данные хеш-функции - это некоторое количество байтов двоичных данных.Например, если вы используете модули md5, sha или hashlib, вам не нужно кодировать его как что-либо в первую очередь - просто вызовите .digest() вместо .hexdigest() для хеш-объекта.

4 голосов
/ 07 августа 2010

Просто декодируйте данные base64 в двоичный файл:

>>> b64 = "COIC09jwcwjiciOEIWIUNIUNE9832iun"
>>> len(b64)
32
>>> b = b64.decode("base64")
>>> b
'\x08\xe2\x02\xd3\xd8\xf0s\x08\xe2r#\x84!b\x144\x85\r\x13\xdf7\xda+\xa7'
>>> len(b)
24
2 голосов
/ 07 августа 2010

"хранить данные base64"

Не.

До.Не.Хранить.Base64.Данные.

Base64 создается путем кодирования что-то , чтобы увеличить его.

Сохранение оригинального что-то Никогда не храните кодировку base64 что-то .

1 голос
/ 10 августа 2010

Дэвид дал ответ, который работает со всеми строками base64.

Просто используйте

base64.decodestring
в модуле base64.То есть
import base64
binary = base64.decodestring(base64_string)

- более эффективное представление памяти исходной строки base64.Если вы усекаете трейлинг '==' в своей base64 md5, используйте его как

base64.decodestring(md5+'==')
...