Как сделать пользовательскую кодировку для дайджеста md5/sha1 в python?

Я написал код 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 вопроса тут:

  1. Правильно ли я конвертирую дайджест в список для обработки каждого символа? (если нет, то как правильно)

  2. Как мне сделать пользовательскую кодировку в соответствии с псевдокодом, который я упомянул выше.

PS :

Я не хочу использовать encode() API Python для кодирования base64, так как мне нужна моя пользовательская кодировка, как указано выше, поэтому, пожалуйста, не предлагайте это, если я не смогу добавить свою логику this в этот API.

Пробовал ссылаться на это, но не повезло


person spt025    schedule 18.05.2017    source источник
comment
один байт может быть только 0-255...   -  person Joran Beasley    schedule 18.05.2017
comment
Каким будет правильное значение › 255 для байта?   -  person Klaus D.    schedule 18.05.2017
comment
вообще непонятно, вы пытаетесь добавить значение ascii '3' =>51? или вы пытаетесь добавить целое число 3? или вы пытаетесь добавить символ «3» (т.е. '43')? ... вы пытаетесь объединить символ «x» с char_val? или суммировать значение ascii 'x'?   -  person Joran Beasley    schedule 18.05.2017
comment
return ''.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
comment
Привет, Джоран, он использует значения ascii. Что я не понял, так это то, что код С++ берет 1 символ и сдвигает его 4 раза char ›› 4, а затем применяет мой псевдокод, затем снова char & 0x0f и снова запускается тот же псевдокод   -  person spt025    schedule 18.05.2017
comment
I@JoranBeasley Я думаю, ваше решение может сработать, если я правильно разделю эти символы в списке. извините за отсутствие значения ascii в вопросе ..редактирование   -  person spt025    schedule 18.05.2017