Разница между командами хеширования в Linux - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить хэши паролей, закодированные в base64, для базы данных входа в систему. Я использую библиотеку безопасности picketbox для получения хэшей паролей в кодировке base64, но я хотел бы получить другой инструмент.

  1. Если я использую:

    java -cp $JBOSS_HOME/modules/system/layers/base/org/picketbox/main/picketbox-4.9.6.Final.jar org.jboss.security.Base64Encoder  master SHA-256
    

    Я получаю:

    [/GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=];
    

    [ ] необходимо удалить в базе данных для правильного входа в систему.

  2. Когда я использую:

     echo -n master | openssl dgst -sha256 -binary | base64
    

    Получаю:

    /GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=
    

Тот же результат.

Однако, когда я использую:

echo -n master |sha256sum -b | base64

, я получаю:

ZmM2MTNiNGRmZDY3MzZhN2JkMjY4YzhhMGU3NGVkMGQxYzA0YTk1OWY1OWRkNzRlZjI4NzQ5ODNmZDQ0M2ZjOSAqLQo=

В чем разница между openssl dgst -sha256 -binary и sha256sum -b ? Я думал они дадут такие же га sh.

1 Ответ

0 голосов
/ 08 мая 2020

Обратите внимание на разницу между openssl и sha256sum:

  • openssl печатает ha sh в необработанном двоичном формате. Это не текст, он не читается человеком, это чистые байты:

    $ echo -n master | openssl dgst -sha256 -binary
    �Y��N�I��D?�
    

    Если вы посчитаете байты с помощью wc ---bytes, вы увидите, что он печатает ровно 32 байта:

    $ echo -n master | openssl dgst -sha256 -binary | wc --bytes
    32
    

    Мы также можем преобразовать его в шестнадцатеричный с помощью hexdump:

    $ echo -n master | openssl dgst -sha256 -binary | hexdump
    0000000 61fc 4d3b 67fd a736 26bd 8a8c 740e 0ded
    0000010 041c 59a9 9df5 4ed7 87f2 8349 44fd c93f
    0000020
    
  • Напротив, sha256sum печатает ha sh в удобочитаемой форме в шестнадцатеричном виде с использованием цифр * 1022. * и буквы a-f.

    $ echo -n master | sha256sum -b
    fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9 *-
    

    Это та же информация, что и в искаженном двоичном коде выше, но представлена ​​по-другому. Вы заметите, что шестнадцатеричное значение занимает намного больше места, чем двоичные данные. Он также включает имя файла в конце, которое здесь crypti c *-. * означает, что вы использовали флаг -b, а - означает, что ввод был прочитан из стандартного ввода.

Вы можете получить такое же шестнадцатеричное значение из openssl, если вы измените -binary на -hex:

$ echo -n master | openssl dgst -sha256 -hex
(stdin)= fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9

Однако нет возможности сделать обратное. sha256sum не имеет флага для печати двоичного файла ha sh. Может только шестнадцатеричный.

...