Получите хэш sha1 из двоичного значения base64 для openssl

785
Tandy Freeman

Пакеты Digital Cinema содержат контрольные суммы в следующем формате, как описано здесь :

$ openssl sha1 -binary 'dcpfile.xml' |openssl base64 IxcfhXNHlw+1bbDFu0kp8KRylpU= 

Как я могу взять значение, такое как IxcfhXNHlw+1bbDFu0kp8KRylpU=и получить оригинальный хэш sha1, который будет выглядеть примерно так

$ openssl sha1 'dcpfile.xml'  SHA1(dcpfile.xml)= 23171f857347970fb56db0c5bb4929f0a4729695 

Мой пример использования заключается в том, что существует не так много инструментов для проверки контрольной суммы, которые легко позволяют вам проверить манифест контрольной суммы типа md5sum, использующий эти двоичные значения / base64, но есть много инструментов, которые проверяют sha1, поэтому было бы здорово, если бы я знал как изменить эти значения, чтобы я мог написать скрипт, который генерировал бы более совместимый список хэшей.

1

1 ответ на вопрос

1
grawity

Оба значения являются одним и тем же хешем - одни и те же «двоичные» байты показаны в двух разных кодировках (представлениях), и ни одно из них не является более «оригинальным», чем другое.

(Base64 имеет 6 битов на символ; шестнадцатеричный, то есть base-16 имеет 4 бита на цифру. Три необработанных байта, четыре цифры Base64, шесть шестнадцатеричных цифр могут быть преобразованы напрямую.)

Почти каждый язык программирования будет иметь функции для кодирования / декодирования этих форматов. Например, в инструментах оболочки:

  • Чтобы декодировать Base64 в необработанные двоичные данные, используйте base64 -dили openssl base64 -d.

  • Чтобы закодировать необработанные двоичные данные в шестнадцатеричное, используйте xxd -pили hexdump.

$ echo 23171f857347970fb56db0c5bb4929f0a4729695 | xxd -r -p | base64 IxcfhXNHlw+1bbDFu0kp8KRylpU=  $ echo IxcfhXNHlw+1bbDFu0kp8KRylpU= | base64 -d | hd 00000000 23 17 1f 85 73 47 97 0f b5 6d b0 c5 bb 49 29 f0 |#...sG...m...I).| 00000010 a4 72 96 95 |.r..| 
Отлично, так что это `openssl sha1 -binary 'dcp_file.xml' | openssl base64 | base64 -d | xxd -p` выдаст `23171f857347970fb56db0c5bb4929f0a4729695` - теперь мне просто нужно сделать все это на python, который, я думаю, вы сказали мне, как выяснить. Спасибо! Tandy Freeman 6 лет назад 0
Импорт `base64` и` binascii`. grawity 6 лет назад 1
Спасибо!! Это сделает мою жизнь намного проще. Tandy Freeman 6 лет назад 0
`` `import binascii import base64 a = 'IxcfhXNHlw + 1bbDFu0kp8KRylpU =' b = base64.b64decode (a) binascii.hexlify (b) .decode () u'23171f857347970fb56db0c5bb4929f`a29 Tandy Freeman 6 лет назад 0