Hexify sha digest результат без использования hashlib - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть дайджест-значение данных в строковом формате, и я хотел бы его шестнадцатеричное.

Вот пример строки '\xf0z\xd8[\xfc\x7f'

Однако я не могу использовать hashlib поскольку у меня нет исходных данных, из которых был создан хеш.

попытка .digesthex() в строке не будет работать, поскольку у объекта str нет этого метода.Есть ли альтернатива?

1 Ответ

0 голосов
/ 27 ноября 2018

Для каждого символа в исходной строке используйте ord, чтобы получить числовое значение символа, а затем используйте операцию форматирования строки, чтобы выразить это числовое значение в виде строки, содержащей пару шестнадцатеричных символов.Объедините эти двузначные строки в одну строку.

    mystring = '\xf0z\xd8[\xfc\x7f'
    result = ''
    for ch in mystring:
        number = ord(ch)
        hexdigits = '{:02x}'.format(number)
        result += hexdigits
    print result   

Вы можете сделать все это в одной строке, используя понимание списка, чтобы собрать пары строк шестнадцатеричных цифр в список, а затем используя *Метод 1005 * с пустой строкой-разделителем для склеивания шестнадцатеричных строк в одну строку.

    mystring = '\xf0z\xd8[\xfc\x7f'
    result   = ''.join([ '{:02x}'.format(ord(ch)) for ch in mystring ])
    print result

Или вместо понимания списка вы можете использовать map с lambda для построения спискапар шестнадцатеричных цифр.

    mystring = '\xf0z\xd8[\xfc\x7f'
    result   = ''.join(map(lambda ch: '{:02x}'.format(ord(ch)), mystring))
    print result

Версия map труднее читать, но она может работать немного быстрее.

...