Почему мой хэш md5sum не совпадает с другим md5s?

1089
James

Так что для школьного задания мы работаем с хешами. Однако я столкнулся с проблемой, где мой файл file.txt, содержащий:

test hashes test hashes 

без кавычек не соответствует хешу от HashCalc (для windows) и http://www.md5hashgenerator.com/ оба предлагают cd7e8e88f33efb42e0a1148e92c5005b, в то время как md5sum на моем linux linux поставляется с f3c5fdf4320346eb9bd2a6b64224

head -c -1 file.txt | md5sum 

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

0
`cd7e8e88f33efb42e0a1148e92c5005b` - это хэш md5 для обеих строк в сочетании с символом новой строки, который отделяет первую строку от второй. Ramhound 7 лет назад 1
Вы не сказали нам, какой хеш MD5 вы ожидаете. Ramhound 7 лет назад 0
Я ожидаю, что конец 5005b появится в md5sum, и я хочу знать, почему они не совпадают. Разве алгоритм не такой же? James 7 лет назад 0
Если вы ожидаете 5005b, значит, ваша команда неверна. В настоящее время вы получаете только одну строку, тогда как для генерации 5005b вам понадобятся обе строки. Ваша текущая команда читает только 1 байт. Вы должны использовать опцию -n, а не -c. Вы должны предоставить нам строку, которая сгенерировала 35248e Ramhound 7 лет назад 0
[Главное командование] (http://www.linfo.org/head.html) Ramhound 7 лет назад 0
на самом деле эта команда читает все, кроме одного байта. -c -1 - удалить новую строку после файла. Команда работает с одной строкой в ​​файле, но несколько строк не совпадают. echo -n "тестовые хэши" | md5sum и мой предыдущий код совпадают с одной строкой в ​​файле. James 7 лет назад 0
после небольшого теста я думаю, что -c1 берет первый байт, а -c -1 - последний. Кто-то еще предложил удалить newLine, поэтому я не уверен, как он работает, но он работает только с одной строкой в ​​текстовом файле. Благодаря ответу Камиля я теперь знаю, почему они не совпадают с новыми строками. Теперь проблема заключается в том, чтобы он увидел \ r \ n для новых строк во всем файле .txt. James 7 лет назад 0
Я знал, что это было что-то подобное. Ramhound 7 лет назад 0

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

2
Kamil Maciorowski
$ echo -ne "test hashes\ntest hashes" | md5sum  f3c5fdf4320346eb9bd2a6b64235248e - $ echo -ne "test hashes\r\ntest hashes" | md5sum  cd7e8e88f33efb42e0a1148e92c5005b - 

Речь идет о \nконце Unix ( ) или окончании строки DOS ( \r\n).

Вы можете конвертировать окончания строк Unix в DOS unix2dos:

$ echo -ne "test hashes\ntest hashes" | unix2dos | md5sum cd7e8e88f33efb42e0a1148e92c5005b - 

Обратная команда есть dos2unix.

Теперь мы куда-то добираемся. Это объясняет, почему он не работает, так как мне добавить \ r во весь файл, чтобы хеш был одинаковым для файлов .txt для windows и linux? РЕДАКТИРОВАТЬ: я имею в виду файл, созданный в Windows и файл, созданный в Linux James 7 лет назад 0
Извините, запутанный вопрос. лучше сформулировано: какую терминальную команду я могу использовать для получения хеша 5005b в linux для файла, а не для эха? James 7 лет назад 0
@ Джеймс Я расширил свой ответ. Kamil Maciorowski 7 лет назад 0
Отлично, что unix2dos - это именно то, чего мне не хватало James 7 лет назад 0

Похожие вопросы