Процедура заполнения не должна создавать коллизии.Если у вас есть сообщение m , оно добавляется в pm , длина которого кратна 512. Теперь представьте pm как сообщение m ' сам по себе, т.е. биты заполнения уже добавлены, как если бы они были частью сообщения.Если заполнение просто сохраняет m ' без изменений, как вы предлагаете, то m и m' приведут к одинаковому значению хэша, даже если они являются отдельными сообщениями.Это будет коллизия, также известная как «совсем не годится».
Вообще говоря, процедура заполнения должна быть такой, чтобы ее можно было однозначно удалить: вы должны иметь возможность просматривать заполненное сообщение,и без колебаний решите, какие биты взяты из самого сообщения, а какие были добавлены в качестве дополнения.Ничто в ходе хэш-функции на самом деле не удаляет отступы, но это должно быть концептуально осуществимо.Это в некотором роде математически невозможно, если сообщения длиной, кратной 512, «дополняются», вообще не добавляя ни одного бита.
Вышеприведенное является общим для всех хеш-функций.MD5 и нескольким функциям того же общего семейства (включая SHA-1, SHA-256 ...), использующим конструкцию Меркле-Дамгарда , также требуется, чтобы длина входных данных была закодирована в заполнении (это необходимо для достижения некоторых доказательств безопасности).В MD5 длина кодируется как 64-битное число.С битом «1» для каждого сообщения есть как минимум 65 битов заполнения (и максимум 511).