Вам нужно разбить команду, чтобы понять, что происходит.
- Первая часть команды:
openssl dgst -sha256 -binary <file>
дает вам двоичный файл SHA256 контрольная сумма для файла.
- Вторая часть команды:
openssl enc -base64
кодирует двоичную контрольную сумму SHA256 в Base64.
Итак, для репликации в Java вам просто нужно выполнить те же шаги:
- Вычислить SHA256 двоичную контрольную сумму.
- 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=