C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: MD5  (Прочитано 3326 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


MD5
« : 31 Март 2015, 16:36:51 »

Как правильно по шагам подключить и использовать MD5.h и MD5.cpp?

[ilink32 Error] Error: Unresolved external 'MD5Init(MD5_CTX *)' referenced from C:\USERSMY\WORK\PASCALSERVERTCP\WIN32\DEBUG\UNIT1MAINFORM.OBJ
[ilink32 Error] Error: Unresolved external 'MD5Update(MD5_CTX *, unsigned char *, unsigned int)' referenced from C:\USERSMY\WORK\PASCALSERVERTCP\WIN32\DEBUG\UNIT1MAINFORM.OBJ
[ilink32 Error] Error: Unresolved external 'MD5Final(unsigned char *, MD5_CTX *)' referenced from C:\USERSMY\WORK\PASCALSERVERTCP\WIN32\DEBUG\UNIT1MAINFORM.OBJ
Записан
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


Re: MD5
« Ответ #1 : 31 Март 2015, 16:55:22 »

Давно писал программу MD5 и Base64
По-моему в hpp
Код:
#include "IdBaseComponent.hpp"
#include "IdCoder.hpp"
#include "IdCoder3to4.hpp"
#include "IdCoderMIME.hpp"
#include
в cpp, соответственно:
Код:
#pragma link "IdBaseComponent"
#pragma link "IdCoder"
#pragma link "IdCoder3to4"
#pragma link "IdCoderMIME"
Вроде заморочек не было. Если нужен код, выложу.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: MD5
« Ответ #2 : 31 Март 2015, 17:26:23 »

Мне дали эти два файла MD5.h и MD5.cpp сказали для использования.

Цитировать
По-моему в hpp

Этот MD5.h такой:
Код:
#ifndef MD5H
#define MD5H
//---------------------------------------------------------------------------
//POINTER defines a generic pointer type
typedef unsigned char * POINTER;

//UINT2 defines a two byte word
typedef unsigned short int UINT2;

//UINT4 defines a four byte word
typedef unsigned long int UINT4;
//---------------------------------------------------------------------------


typedef struct
{
    UINT4 state[4];             //state (ABCD)
    UINT4 count[2];             // number of bits, modulo 2^64 (lsb first)
    unsigned char buffer[64];   // input buffer
}MD5_CTX;

void MD5Init(MD5_CTX *);
void MD5Update(MD5_CTX *, unsigned char *, unsigned int);
void MD5Final(unsigned char [16], MD5_CTX *);
//---------------------------------------------------------------------------
char * MD5String (char * string,unsigned char * digest);
//---------------------------------------------------------------------------
#endif

Сделал так:
Код:
#ifdef __cplusplus
extern "C" void MD5Init(MD5_CTX *);
extern "C" void MD5Update(MD5_CTX *, unsigned char *, unsigned int);
extern "C" void MD5Final(unsigned char [16], MD5_CTX *);
#else
void MD5Init(MD5_CTX *);
void MD5Update(MD5_CTX *, unsigned char *, unsigned int);
void MD5Final(unsigned char [16], MD5_CTX *);
#endif

Не помогло...
Читала в интернете, что вроде надо еще создать lib чтобы работало. Какой lib и как создать не понятно.
Записан
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


Re: MD5
« Ответ #3 : 31 Март 2015, 18:06:11 »

Код:
void __fastcall TGlav_Form::G_Button1Click(TObject *Sender)
{
if (G_OpenDialog->Execute()) {
if (FileExists(G_OpenDialog->FileName)) {
try {
G_ListBox1->Items->LoadFromFile(G_OpenDialog->FileName);
} catch (...) {
}
}
}
}
//---------------------------------------------------------------------------
String __fastcall MD5(const String Text)
{
String result;
TIdHashMessageDigest5 *idmd5 = new TIdHashMessageDigest5();
try {
result = idmd5->HashStringAsHex(Text, TIdTextEncoding::UTF8);
}
__finally {
delete idmd5;
}
return result;
}
//---------------------------------------------------------------------------
String Base64Encode(String Input)
{
    std::auto_ptr IdEncoderMIME1(new TIdEncoderMIME(NULL));
return IdEncoderMIME1->EncodeString(Input, TIdTextEncoding::UTF8);
}
//---------------------------------------------------------------------------
void __fastcall TGlav_Form::G_Button3Click(TObject *Sender)
{
if (RadioButton1->Checked) {
if (G_ListBox1->Items->Count > -1) {
G_ListBox2->Items->Clear();
for (int i = 0; i Items->Count; i++) {
Application->ProcessMessages();
if (G_Edit->Text != "")
G_ListBox2->Items->Add(MD5(G_Edit->Text + G_ListBox1->Items->Strings[i]));
else G_ListBox2->Items->Add(MD5(G_ListBox1->Items->Strings[i]));
}
}
}
else {
if (G_ListBox1->Items->Count > -1) {
G_ListBox2->Items->Clear();
for (int i = 0; i Items->Count; i++) {
Application->ProcessMessages();
if (G_Edit->Text != "")
G_ListBox2->Items->Add(Base64Encode(G_Edit->Text + G_ListBox1->Items->Strings[i]));
else G_ListBox2->Items->Add(Base64Encode(G_ListBox1->Items->Strings[i]));
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TGlav_Form::G_Button2Click(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TGlav_Form::G_Button4Click(TObject *Sender)
{
TMemo *Memo1 = new TMemo(Owner);
Memo1->Parent = Glav_Form;
    Memo1->Visible = false;
for (int i = 0; i Items->Count; i++) {
Application->ProcessMessages();
Memo1->Lines->Add(G_ListBox1->Items->Strings[i]);
Memo1->Lines->Add(G_ListBox2->Items->Strings[i]);
}
if (SaveDialog1->Execute()) {
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
try {
    delete Memo1;
} catch (...) {
}
}
Суть такая. Дан файл с фио детей. Надо было привести к MD5 или base64
Записан
ДмитрийЛАСТ
Участник


Сказали спасибо: +3/-0
Offline

Сообщений: 11


Re: MD5
« Ответ #4 : 31 Март 2015, 18:09:32 »

У меня еще соль была. Если то, пожалуйста.
А подключение md5 у меня по-моему тоже проблемы вызвали
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: MD5
« Ответ #5 : 31 Март 2015, 21:18:12 »

Я использовал заголовочные файлы Indy. Вот пример хеш-функций MD5 и SHA-1:
Код
#include 
#include // MD5
#include           // SHA
#include
//---------------------------------------------------------------------------
namespace Hashmethods {
//---------------------------------------------------------------------------
 
/*
 This template function retrieves the hash digest of a string using any
 of the hash algorithms available in Indy and derived from TIdHash.
*/

template class THasher>
inline String __fastcall GetHashOf(const String& AValue, bool LowerCase=true)
{
std::unique_ptrTHasher> Hash(new THasher());
String res(Hash->HashStringAsHex(AValue));
return LowerCase? res.LowerCase() : res.UpperCase();
}
//---------------------------------------------------------------------------
inline String __fastcall Hash_SHA1(const String& AValue, bool LowerCase=true)
{
// get the SHA-1 hash for AValue
return GetHashOfTIdHashSHA1>(AValue, LowerCase);
}
//---------------------------------------------------------------------------
inline String __fastcall Hash_MD5(const String& AValue, bool LowerCase=true)
{
// get the MD5 hash for AValue
return GetHashOfTIdHashMessageDigest5>(AValue, LowerCase);
}
 
//---------------------------------------------------------------------------
} // namespace Hashmethods
//---------------------------------------------------------------------------
 

PS. Т.к. функция GetHashOf является шаблоном, то можно добавлять любые другие реализации хеш-функций вроде Hash_SHA1 и  Hash_MD5 аналогично приведенным, лишь бы соответствующий класс определял метод HashStringAsHex.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: MD5
« Ответ #6 : 06 Апрель 2015, 20:44:20 »

Может я чего то не понял (простите в таком случае), но я использовал прикрепленные файлы и в нужном модуле инклудил MD5.h
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #7 : 07 Апрель 2015, 10:07:04 »

Спасибо большое. Я нашла свою ошибку почему линкер ругался. Я просто забыла тупо добавить сам MD5.cpp в проект.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.064 секунд. Запросов: 21.