Я написал код Python, где мне нужен дайджест файла md5/sha1 для дальнейшего использования.
import hashlib
md5_file = hashlib.md5(my_file_path).digest()
который будет генерировать дайджест такого рода.
'si\x155u\xba\xd2\xf9N^\xabq\xc87\xffh'
Теперь это шестнадцатеричное представление md5 в 16 бит. Следующее, что я сделал, было преобразовано в список
md5hexstring = list(md5_file)
o/p = ['s', 'i', '\x15', '5', 'u', '\xba', '\xd2', '\xf9', 'N', '^', '\xab', 'q', '\xc8', '7', '\xff', 'h']
теперь я хочу закодировать это, используя пользовательскую кодировку, которая имеет подобную логику.
pseudo code of logic I want to use:
char_val >> 4 then
if char_val < 6 : new_val = char_val + '3' else : new_val = 'x' + char_val - 7
encoded_val = encoded_val + new_val
again char_val & 0x0f then
if char_val < 6 : new_val = char_val + '3' else : new_val = 'x' + char_val - 7
encoded_val = encoded_val + new_val
ascii значение символа 3 добавляется, например. '3'=>51 + char_val =
Теперь это обычно легко сделать в C++, но в python я пробовал ord()
и chr()
, но это ограничение 255, а вычисление контрольной суммы обычно имеет большее значение. Поэтому я не уверен, как это сделать на питоне.
2 вопроса тут:
Правильно ли я конвертирую дайджест в список для обработки каждого символа? (если нет, то как правильно)
Как мне сделать пользовательскую кодировку в соответствии с псевдокодом, который я упомянул выше.
PS :
Я не хочу использовать encode()
API Python для кодирования base64, так как мне нужна моя пользовательская кодировка, как указано выше, поэтому, пожалуйста, не предлагайте это, если я не смогу добавить свою логику this в этот API.
Пробовал ссылаться на это, но не повезло
'3' =>51
? или вы пытаетесь добавить целое число3
? или вы пытаетесь добавить символ «3» (т.е.'43'
)? ... вы пытаетесь объединить символ «x» с char_val? или суммировать значение ascii'x'
? - person Joran Beasley   schedule 18.05.2017return ''.join(unichr(ord(c)+3 if ord(c) < 6 else ord(c)+ord('x')-7) for c in digest)
может быть? ... без понятия - person Joran Beasley   schedule 18.05.2017