3 / 3 / 0
Регистрация: 19.01.2014
Сообщений: 57
1

Код нахождения MD5

09.01.2015, 20:39. Показов 693. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Првиет всем.Задача такова.Необходимо скомпилировать код.Для нахождения MD5.

Беру пример отсюда.http://www.vr-online.ru/conten... hagom-1581


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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include "stdafx.h"
#include <math.h>
#include "md5.h"
 
uint F(uint X, uint Y, uint Z) {return ((X & Y) | ((~X) & Z));}
uint G(uint X, uint Y, uint Z) {return (X & Z) | (Y & (~Z));}
uint H(uint X, uint Y, uint Z) {return X ^ Y ^ Z;}
uint I(uint X, uint Y, uint Z) {return Y ^ (X | (~Z));}
uint rotate_left(uint value, int shift) {return value << shift | value >> (32-shift);}
 
#include <string>
using namespace std;
 
std::string get_md5(std::string in)
{
    int length = in.length();
    int rest = length%64;
    int size = 0;
 
    if(rest < 56) 
        size = length - rest + 56 + 8; 
    else
        size = length + 64 - rest + 56 + 8;
 
    unsigned char *msg_for_decode = new unsigned char[size];
    
    for(int i=0; i < length; i++) 
        msg_for_decode[i] = in[i]; 
    msg_for_decode[length] = 0x80;
    for(int i = length + 1; i < size; i++)
        msg_for_decode[i] = 0;
 
    __int64 bit_length = (uint)(length)*8;
 
    for(int i = 0; i < 8; i++)
        msg_for_decode[size - 8 + i] = (unsigned char)(bit_length >> i * 8);
 
    uint A=0x67452301, B=0xefcdab89, C=0x98badcfe, D=0x10325476;
    uint T[64]; 
 
    for(int i=0;i<64;i++) 
        T[i]= uint(pow(2,32)*fabs(sin(i + 1))); 
 
    uint *X=(uint*)(msg_for_decode);
 
    uint AA = 0, BB = 0, CC = 0, DD = 0;
 
    for(int i = 0; i < size/4; i+=16){
        AA = A;BB = B; CC = C; DD = D;
 
        //раунд 1
        A = B + rotate_left((A + F(B,C,D) + X[i+ 0] + T[ 0]),  7);
        D = A + rotate_left((D + F(A,B,C) + X[i+ 1] + T[ 1]), 12);
        C = D + rotate_left((C + F(D,A,B) + X[i+ 2] + T[ 2]), 17);
        B = C + rotate_left((B + F(C,D,A) + X[i+ 3] + T[ 3]), 22);
 
        A = B + rotate_left((A + F(B,C,D) + X[i+ 4] + T[ 4]),  7);
        D = A + rotate_left((D + F(A,B,C) + X[i+ 5] + T[ 5]), 12);
        C = D + rotate_left((C + F(D,A,B) + X[i+ 6] + T[ 6]), 17);
        B = C + rotate_left((B + F(C,D,A) + X[i+ 7] + T[ 7]), 22);
 
        A = B + rotate_left((A + F(B,C,D) + X[i+ 8] + T[ 8]),  7);
        D = A + rotate_left((D + F(A,B,C) + X[i+ 9] + T[ 9]), 12);
        C = D + rotate_left((C + F(D,A,B) + X[i+10] + T[10]), 17);
        B = C + rotate_left((B + F(C,D,A) + X[i+11] + T[11]), 22);
 
        A = B + rotate_left((A + F(B,C,D) + X[i+12] + T[12]),  7);
        D = A + rotate_left((D + F(A,B,C) + X[i+13] + T[13]), 12);
        C = D + rotate_left((C + F(D,A,B) + X[i+14] + T[14]), 17);
        B = C + rotate_left((B + F(C,D,A) + X[i+15] + T[15]), 22);
 
        //раунд 2
        A = B + rotate_left((A + G(B,C,D) + X[i+ 1] + T[16]),  5);
        D = A + rotate_left((D + G(A,B,C) + X[i+ 6] + T[17]),  9);
        C = D + rotate_left((C + G(D,A,B) + X[i+11] + T[18]), 14);
        B = C + rotate_left((B + G(C,D,A) + X[i+ 0] + T[19]), 20);
 
        A = B + rotate_left((A + G(B,C,D) + X[i+ 5] + T[20]),  5);
        D = A + rotate_left((D + G(A,B,C) + X[i+10] + T[21]),  9);
        C = D + rotate_left((C + G(D,A,B) + X[i+15] + T[22]), 14);
        B = C + rotate_left((B + G(C,D,A) + X[i+ 4] + T[23]), 20);
 
        A = B + rotate_left((A + G(B,C,D) + X[i+ 9] + T[24]),  5);
        D = A + rotate_left((D + G(A,B,C) + X[i+14] + T[25]),  9);
        C = D + rotate_left((C + G(D,A,B) + X[i+ 3] + T[26]), 14);
        B = C + rotate_left((B + G(C,D,A) + X[i+ 8] + T[27]), 20);
 
        A = B + rotate_left((A + G(B,C,D) + X[i+13] + T[28]),  5);
        D = A + rotate_left((D + G(A,B,C) + X[i+ 2] + T[29]),  9);
        C = D + rotate_left((C + G(D,A,B) + X[i+ 7] + T[30]), 14);
        B = C + rotate_left((B + G(C,D,A) + X[i+12] + T[31]), 20);
 
        //раунд 3
        A = B + rotate_left((A + H(B,C,D) + X[i+ 5] + T[32]),  4);
        D = A + rotate_left((D + H(A,B,C) + X[i+ 8] + T[33]), 11);
        C = D + rotate_left((C + H(D,A,B) + X[i+11] + T[34]), 16);
        B = C + rotate_left((B + H(C,D,A) + X[i+14] + T[35]), 23);
 
        A = B + rotate_left((A + H(B,C,D) + X[i+ 1] + T[36]),  4);
        D = A + rotate_left((D + H(A,B,C) + X[i+ 4] + T[37]), 11);
        C = D + rotate_left((C + H(D,A,B) + X[i+ 7] + T[38]), 16);
        B = C + rotate_left((B + H(C,D,A) + X[i+10] + T[39]), 23);
 
        A = B + rotate_left((A + H(B,C,D) + X[i+13] + T[40]),  4);
        D = A + rotate_left((D + H(A,B,C) + X[i+ 0] + T[41]), 11);
        C = D + rotate_left((C + H(D,A,B) + X[i+ 3] + T[42]), 16);
        B = C + rotate_left((B + H(C,D,A) + X[i+ 6] + T[43]), 23);
 
        A = B + rotate_left((A + H(B,C,D) + X[i+ 9] + T[44]),  4);
        D = A + rotate_left((D + H(A,B,C) + X[i+12] + T[45]), 11);
        C = D + rotate_left((C + H(D,A,B) + X[i+15] + T[46]), 16);
        B = C + rotate_left((B + H(C,D,A) + X[i+ 2] + T[47]), 23);
 
        //раунд 4
        A = B + rotate_left((A + I(B,C,D) + X[i+ 0] + T[48]),  6);
        D = A + rotate_left((D + I(A,B,C) + X[i+ 7] + T[49]), 10);
        C = D + rotate_left((C + I(D,A,B) + X[i+14] + T[50]), 15);
        B = C + rotate_left((B + I(C,D,A) + X[i+ 5] + T[51]), 21);
 
        A = B + rotate_left((A + I(B,C,D) + X[i+12] + T[52]),  6);
        D = A + rotate_left((D + I(A,B,C) + X[i+ 3] + T[53]), 10);
        C = D + rotate_left((C + I(D,A,B) + X[i+10] + T[54]), 15);
        B = C + rotate_left((B + I(C,D,A) + X[i+ 1] + T[55]), 21);
 
        A = B + rotate_left((A + I(B,C,D) + X[i+ 8] + T[56]),  6);
        D = A + rotate_left((D + I(A,B,C) + X[i+15] + T[57]), 10);
        C = D + rotate_left((C + I(D,A,B) + X[i+ 6] + T[58]), 15);
        B = C + rotate_left((B + I(C,D,A) + X[i+13] + T[59]), 21);
 
        A = B + rotate_left((A + I(B,C,D) + X[i+ 4] + T[60]),  6);
        D = A + rotate_left((D + I(A,B,C) + X[i+11] + T[61]), 10);
        C = D + rotate_left((C + I(D,A,B) + X[i+ 2] + T[62]), 15);
        B = C + rotate_left((B + I(C,D,A) + X[i+ 9] + T[63]), 21);
 
        A += AA;
        B += BB;
        C += CC;
        D += DD;
    }
 
    delete []msg_for_decode;
    std::string res = to_hex(A) + to_hex(B) + to_hex(C) + to_hex(D);
    return res;
}
Код конверта в Hex значения я убрал.Так как мне это не нужно.

1>------ Построение начато: проект: MD5Mody, Конфигурация: Debug Win32 ------
1> MD5Mody.cpp
1>c:\users\lex90\documents\visual studio 2010\projects\md5mody\md5mody\md5mody.cpp(60): error C2668: pow: неоднозначный вызов перегруженной функции
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(583): может быть "long double pow(long double,int)"
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(535): или "float pow(float,int)"
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(497): или "double pow(double,int)"
1> при попытке сопоставить список аргументов "(int, int)"
1>c:\users\lex90\documents\visual studio 2010\projects\md5mody\md5mody\md5mody.cpp(60): error C2668: sin: неоднозначный вызов перегруженной функции
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(585): может быть "long double sin(long double)"
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(537): или "float sin(float)"
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(123): или "double sin(double)"
1> при попытке сопоставить список аргументов "(int)"
1>c:\users\lex90\documents\visual studio 2010\projects\md5mody\md5mody\md5mody.cpp(60): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Ошибок валом подскажите пожалуйста.А так же если есть другие нормальные примеры md5 реализации подкиньте если есть.OpenSSl пытался собирать проект с ней ничего не пашет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2015, 20:39
Ответы с готовыми решениями:

Код нахождения MD5
Привет всем с помощью openssl пытаюсь получить md5 #include&lt;iostream&gt;...

Непонятка с функцией md5 нахождения хэш - суммы
Здравствуйте! Решил по чуть-чуть двигаться в сторону более высоких материй, в частности...

Код проверки файла md5
Приветствую всех. Кто напишет &quot;Если конечно не сложно вам будет&quot; код проверки файла md5. ...

Перевести код с VB. NET на PHP (хеширование MD5)
Добрый день, товарищи. Возможно, кто-то подскажет. Перед мной стоит задача - перенести код с...

4
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
09.01.2015, 20:57 2
На сайте Майкрософта есть описание этой ошибки и способы устранения. См. тут
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
09.01.2015, 20:58 3
Цитата Сообщение от lex90 Посмотреть сообщение
Код конверта в Hex значения я убрал.Так как мне это не нужно.
рассмешил. тебе не нужно, а программе нужно. верни ее обратно.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.01.2015, 21:42 4
Замени pow(2,32), на 0x100000000.
0
3 / 3 / 0
Регистрация: 19.01.2014
Сообщений: 57
09.01.2015, 22:42  [ТС] 5
Спасибо тогда в этой строке появляется ошибка.
error C2668: sin: неоднозначный вызов перегруженной функции
0
09.01.2015, 22:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2015, 22:42
Помогаю со студенческими работами здесь

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

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

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

Где можно найти готовый исходный код MD5 для файла?
MD5 - исходный код на СИ / С++? Где можно найти готовый исходный код MD5 для файла?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru