https://crackstation.net/buy-crackstati ... ionary.htm
Kód: Vybrat vše
du -h /media/mirek/Data/crackstation.txt
15G /media/mirek/Data/crackstation.txt
Kód: Vybrat vše
#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>
int main(int argc, char *argv[]){
int i = 1;
while (1)
{
unsigned char text[64] = "";
char hashFunction[] = "sha256"; // zvolena hashovaci funkce ("sha1", "md5" ...)
if (fgets(text,128,stdin) == NULL)
break;
strtok(text, "\n");
EVP_MD_CTX ctx; // struktura kontextu
const EVP_MD *type; // typ pouzite hashovaci funkce
unsigned char hash[EVP_MAX_MD_SIZE]; // char pole pro hash - 64 bytu (max pro sha 512)
int length; // vysledna delka hashe
char buffer1[2];
char buffer2[2];
/* Inicializace OpenSSL hash funkci */
OpenSSL_add_all_digests();
/* Zjisteni, jaka hashovaci funkce ma byt pouzita */
type = EVP_get_digestbyname(hashFunction);
/* Pokud predchozi prirazeni vratilo -1, tak nebyla zadana spravne hashovaci funkce */
if(!type) {
printf("Hash %s neexistuje.\n", hashFunction);
exit(1);
}
/* Provedeni hashovani */
EVP_DigestInit(&ctx, type); // nastaveni kontextu
EVP_DigestUpdate(&ctx, text, strlen(text)); // zahashuje text a ulozi do kontextu
EVP_DigestFinal(&ctx, hash, (unsigned int *) &length); // zjiskani hashe z kontextu
// nacteme si vysledek do bufferu
sprintf(buffer1,"%02x", hash[0]);
sprintf(buffer2,"%02x", hash[1]);
// porovname ho na shodu
if (!strcmp(buffer1,"aa") && !strcmp(buffer2,"bb"))
{
printf("Vyhercem se stava:\n%s\nna radku %d\n\nVypis v hexadecimalni podobe:\n",text,i);
for(i = 0; i < strlen(text); i++)
{
printf("%02x", text[i]);
}
printf("\n");
printf("Hash je:\n");
for(i = 0; i < length; i++){
printf("%02x", hash[i]);
}
printf("\n");
return 0;
}
i++;
}
exit(0);
}