Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1

Разбираюсь с md5

22.01.2011, 23:52. Показов 4756. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание - реализовать md5.
Разбираюсь в описании алгоритма. Вроде всё хорошо написано в мануалах, но плохо знаю язык, и реализация первых шагов вызывает затруднение.
Непонятно, вот, что именно:
  • На вход алгоритма подается входной поток данных, в конец потока 1, а затем некоторого числа нулей. Нули добавляются до тех пор, пока длина всего потока не станет равной 512*N+448, т.е. равной 448 по модулю 512. Такое выравнивание происходит в любом случае, даже если длина потока уже удовлетворяет данному условию.
  • Затем в конец дописывается двоичное представление длины первоначального потока всего 64 бита. Если же длина больше чем 2^64, то берутся младшие 64 бита. Это добавление представляет собой два «слова», младшее идет первым, за ним старшее. После этого суммарная длина потока станет кратной 16 32-битным словам.
Как это выглядит?
З.Ы. Исходники исходники глядел.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2011, 23:52
Ответы с готовыми решениями:

Если MD5 программы не равен MD5, указанному на сервере, то программа закрывается
И так, собственно, изложил свою мысль в заголовке. Если MD5 программы не равен MD5, указанному на сервере (в текстовом файле), то...

Проверка MD5 локального файла с MD5 записанных в двух разных текстовых файлах
Задача такова: Public Function CheckHash(LocalPath As Object, MD5File As Object) LocalPath - Местонахождение локальных файлов, у...

Сравнение md5-сумм с md5-суммами файлов!
Всем доброго времени суток! Помогите реализовать небольшое приложение - вообщем имеется папка "Тест" в этой папке есть 2 файла...

4
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
23.01.2011, 00:11
http://md5x.ru/a/Realizaciy_al... zke_C.html
0
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1
23.01.2011, 19:11  [ТС]
asics, спасибо. гуглить научили. RFC смотрел.

Добавлено через 18 часов 9 минут
help
Как открыть файл и добавить в него 1 и нулики, и потом 64 битный блок?
0
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1
27.01.2011, 13:44  [ТС]
Plz, plz, plz ))))))))))))))))))))))))
Вот из RFC кусок выдернул
C
1
2
3
4
5
6
if ((file = fopen (filename, "rb")) == NULL)
 printf ("%s can't be opened\n", filename);
 
  else {
 MDInit (&context);
 while (len = fread (buffer, 1, 1024, file)) MDUpdate (&context, buffer, len);
как работает эта строчка?
C
1
len = fread (buffer, 1, 1024, file)
В переменную буфер (её объявленный размер 1024) помещается 1 байт из file? и максимально, таких операции 1024?
1
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1
01.02.2011, 19:51  [ТС]
Хехе... Я ищо жЫв!
Вот, что есть на данный момент. Реализация первых двух шагов. За основу взят текст некого btf
Открываем файл, получаем его длинну, дополняем до кратности 512.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#include <clx.h>
#include <stdio.h>
#include <conio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 
FILE *fp;
if((fp=fopen("D:\\wso.exe", "rb"))==NULL)
printf("\n\nError!!!. I can't open the file");
else
printf("\n\nI open the file");
//узнаем длинну:
fseek(fp, 0L, SEEK_END);
int length=ftell(fp);
printf("\n\nThe size of file is %ld bytes", length);
 
int rests=length%64; //остаток от деления на 64байта(512бит).
int size=0; //размер расширенного сообщения.
 
if(rests<56) //если остатот от деления меньше 56
{
size=length-rests+56+8; //подгоняем длину сообщения, что бы была кратна 64(+8байт для шага 2)
}
 
else //иначе
{
size=length+64-rests+56+8; //подгоняем длину сообщения, что бы была кратна 64(+8байт для шага 2) 
}
 
unsigned char *inChar=new unsigned char[size]; //массив char, в котором будет храниться входящее сообщение с расширенной длиной.
 
for(int i=0;i<length;i++) //от 0 символа до length
{
inChar[i]=fgetc(fp); //заполняем первые length символов inChar символами из входщей строки
}
inChar[length]=128; //добавляем 1 бит в конец потока(128(Dec)=0x80(HEX)=1000000(Bin))
for(int i=length+1;i<size;i++) //оставшуюся часть
{
inChar[i]=0; //заполняем нулями
}
 
//Step2:
 
unsigned long lengthBit=(unsigned long)length*8; //представление длины входящего сообщения в битах
unsigned char Bits[8]; //массив для 64-разрядного представления длин входящего сообщения
//далее заполняем массив младшими битами каждого байта
Bits[0]=lengthBit & 0xFF;
Bits[1]=(lengthBit >> 8) & 0xFF;
Bits[2]=(lengthBit >> 16) & 0xFF;
Bits[3]=(lengthBit >> 24) & 0xFF;
Bits[4]=(lengthBit >> 32) & 0xFF;
Bits[5]=(lengthBit >> 40) & 0xFF;
Bits[6]=(lengthBit >> 48) & 0xFF;
Bits[7]=(lengthBit >> 56) & 0xFF;
 
 
 
for(int i=0;i<8;i++) //каждый элемент массива Bits[]
{
inChar[size-8+i]=Bits[i]; //вставляем в последние 8 байт выравненной строки
}
 
printf("/n new size: %ld", size); int kr=size%64;
 
getch ();        return 0;
}
Слабо представляю, что творится с битами в этот момент. По байтам-то все четко. Но вот не изменяется ли битовая последовательность? Можно как проверить?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2011, 19:51
Помогаю со студенческими работами здесь

Рекурсивное переименование файлов, md5-хеш которых совпадает с md5-хешем, указанном в списке файлов
Есть файл из двух колонок md5-хеш и имя файла (краткое, с расширением, UTF-8). Есть каталог с множеством файлов во всевозможных...

Проверка файла на MD5 и SHA1 и сравнение с готовым MD5 и SHA1
Есть файл text.txt на него md5:53734131cd0cf82dfbbe85e0459089e9 и sha1:8f38ce7cb44c0b78f9cb4de6ddedba2107525386 Код: @echo off ...

md5 c++ and md5 php
Доброе время суток, программисты. Пытаюсь добиться идентичного кодирования текстовой строки в php и билдере. В пхп пользуюсь md5(). В...

Разбираюсь с Path
Правильно ли я понимаю работу этой переменной. В этой переменной хранятся пути к исполняемым файлам(имена файлов,которые мы запускаем).То...

Разбираюсь с USB
Всем доброе время суток. Решил заняться разработкой девайса на микроконтроллере PIC18F2550, который с USB работает. Программировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru