Общие сведения о команде OpenSSL DGST Sha256 в командной строке - PullRequest
0 голосов
/ 03 августа 2020

У меня есть команда openssl dgst -sha256 -binary _your_file_path_ | openssl enc -base64, которую я использую в терминале, чтобы получить вывод для файла jar, который соответствует тому, что AWS Lambda использует для ha sh.

Я хочу запрограммировать это в Java, но мне трудно понять, что именно происходит в этой строке, поэтому я могу go выполнять каждый шаг в моем коде. Очевидно, что в SHA256 есть режим, а не просто хеширование, потому что, когда я это делаю, результат не совпадает.

Может ли кто-нибудь помочь мне простым способом объяснить шаги, которые выполняет эта строка?

1 Ответ

0 голосов
/ 26 августа 2020

Вам нужно разбить команду, чтобы понять, что происходит.

  1. Первая часть команды:
    • openssl dgst -sha256 -binary <file> дает вам двоичный файл SHA256 контрольная сумма для файла.
  2. Вторая часть команды:
    • openssl enc -base64 кодирует двоичную контрольную сумму SHA256 в Base64.

Итак, для репликации в Java вам просто нужно выполнить те же шаги:

  1. Вычислить SHA256 двоичную контрольную сумму.
  2. Base64 кодирует двоичную контрольную сумму SHA256.

Без публикации команды, которую вы использовали, чтобы попытаться получить контрольную сумму SHA256 отдельно от команды, которую вы опубликовали, я предполагаю, почему вы были вероятно получение другого ha sh связано с тем, что по умолчанию контрольная сумма выводится в шестнадцатеричном формате.

См. мой пример ниже и узнайте, как результаты полностью отличаются.

# Hexadecimal
$ openssl dgst -sha256 data.csv
SHA256(data.csv)= 114811b0b8998cb9853a5379598021410feddf69bb2ee7b7145d052a7e9b5d45

# Binary (note the usage of the -binary flag)
$ openssl dgst -sha256 -binary data.csv
H:SyY!Ai.]*~]E

Если вы тогда Base64 кодирует шестнадцатеричную контрольную сумму выше и двоичную, y вы также получите два совершенно разных результата, как вы можете видеть ниже.

# Hexadecimal
$ printf 114811b0b8998cb9853a5379598021410feddf69bb2ee7b7145d052a7e9b5d45 | openssl enc -base64
MTE0ODExYjBiODk5OGNiOTg1M2E1Mzc5NTk4MDIxNDEwZmVkZGY2OWJiMmVlN2I3
MTQ1ZDA1MmE3ZTliNWQ0NQ==

# Binary
$ printf 'H:SyY!Ai.]*~]E' | openssl enc -base64
SDpTeVkhQWkuXSp+XUU=
...