Вопрос: Почему cygwin sha512 создает различные контрольные суммы в зависимости от терминала?


Я использую Windows 7 и имею как Cygwin, так и инструмент командной строки Git на основе ming.

Когда я выдаю команду:

c:\>echo -n hello | e:\cygwin\bin\sha512sum

из Windows cmd, он генерирует

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

которые я считаю некорректный,

Однако, когда я выдаю команду

$ echo -n hello | /e/cygwin/bin/sha512sum

из командной строки git она генерирует

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

который, я считаю, является правильной шестнадцатой контрольной суммой. Я предполагал, что тот же самый ввод отправляется в тот же бинарный исполняемый файл, но это не может быть правильно с поведением, которое я вижу. Windows CMD делает какую-то забавную кодировку, которая отправляет разные данные в бинарный файл cygwin sha512?

РЕДАКТИРОВАТЬ Для всех, кто заинтересован в получении правильной контрольной суммы из стандартного приглашения Windows cmd, трюк заключается не в использовании команды echo окна (ответ ссылается на это). Использование эхо-команды cygwin генерирует правильную контрольную сумму.

Например.,

e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum

2
2018-02-20 16:25


Источник




Ответы:


Окна по умолчанию echo команда добавляет пробелы и завершение строки, даже если вызывается с -n, Попробуй это: echo -n hello > a.txt с последующим dir, и вы увидите, что у вас нет 5-байтового файла.


3
2018-02-20 16:32





Экран echo по умолчанию не понимает «-n». Таким образом, две команды не эквивалентны.

e:\cygwin64\bin>echo -n "hello" |od -c
0000000   -   n       "   h   e   l   l   o   "      \r  \n
0000015

$ echo -n "hello" |od -c
0000000   h   e   l   l   o
0000005

3
2017-07-12 06:04