Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ Linux Md5-hashi tiedostosta

Sivun loppuun

Simppe [15.07.2006 14:23:12]

#

Kuinka tämä onnistuu c++:lla? Tähän mennessä olen saanut luettua kansion sisältämät tiedostot ja nyt niistä pitäisi laskea md5-hash.

#include <iostream>
#include <errno.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
	DIR *pdir;
	struct dirent *pent;

	pdir=opendir("/home/simppe/coding/pak");
	if (!pdir){
		printf ("opendir() failure; terminating");
		exit(1);
	}
	errno=0;
	while ((pent=readdir(pdir))){
		//miten jatkan tästä?
	}
	if (errno){
		printf ("readdir() failure; terminating");
		exit(1);
	}
	closedir(pdir);
}

Eli tarvitsisin siis jonkinlaisen esimerkin md5.h:n toiminnasta.

Metabolix [15.07.2006 14:50:33]

#

Herra on hyvä ja katsoo man-sivuja. Sieltä selviää kyllä. Jokseenkin näin pikaisen vilkaisun perusteella:

MD5_CTX Juttu;
unsigned char Hash[16];
char Heksahash[33];
char *tekstia;

MD5_Init(&Juttu);

while (tekstia = lisaa_tekstia()) {
  MD5_Update(&Juttu, tekstia, strlen(tekstia));
}

MD5_Final(Hash, &Juttu);

for (int i = 0; i < 16; ++i) {
  itoa(Hash[i], Heksahash + (2 * i), 16);
}
printf("%s\n", Heksahash);

Simppe [19.07.2006 19:27:30]

#

Tutkin man-sivuja mutta en saanut varmuutta tuon toiminnasta. Eli siis pitääkö minun käydä rivi riviltä läpi jokainen tiedosto josta haluan hashin ?

Metabolix [19.07.2006 20:05:40]

#

Jos haluat hashin sisällön perusteella, niin pitää. Toki voit tehdä hakemistosta hashin tiedostonimien ja tiedostojen kokojen perusteellakin, jos se riittää tarkoituksiisi. Ja helposti tiedostoa saa luettua ilmankin mitään rivejä:

#define KOKO 1024
char puskuri[KOKO];
FILE * f = fopen("tiedosto", "rb");
size_t luettu;

while (1) {
  luettu = fread(puskuri, 1, KOKO, f);
  MD5_Update(&Juttu, puskuri, luettu);
  if (luettu < KOKO) break;
}
fclose(f);

Simppe [19.07.2006 20:17:38]

#

Jep, tuo näyttää olevan sopiva miun tarkotukseen, menenkin testaamaan heti.
Edit: Missähän mahtaa headerit majailla tolle

Blaze [19.07.2006 20:59:10]

#

Simppe kirjoitti:

Missähän mahtaa headerit majailla tolle

Lukee siellä man-sivulla: openssl/md5.h

Simppe [19.07.2006 23:11:25]

#

Blaze kirjoitti:

Lukee siellä man-sivulla: openssl/md5.h

Pitäs olla asennettuna mut ei löydy.

Sisuaski [20.07.2006 00:51:55]

#

Simppe kirjoitti:

Blaze kirjoitti:

Lukee siellä man-sivulla: openssl/md5.h

Pitäs olla asennettuna mut ei löydy.

Jos ei tuota headeria löydy niin sitten ei ihan kaikkea tarpeellista ole asennettuna tai sitten jotain on pahasti vialla.
Jos kyseessä on Debian-pohjainen distro niin onhan openssl-dev -pakettikin asennettu?

Simppe [20.07.2006 13:29:56]

#

No niinpä olikin openssl on asennettu mut ei tota dev-pakettia


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta