Pravděpodobně nejčastěji potřebuji generovat heslo v md5 crypt formátu, taktže zde uvedu pár postupů jak na to.
Krátký textík o formátu hesel používaných v UNIXových systémech: http://www.zdenda.com/hesla-v-solarisu-a-linuxu
mkpasswd
Program mkpasswd (používám verzi z Debianu) je možné použít pro generování například MD5 hashů hesel. Jenže né vždy je vhodné/možné použít tento program (například na webu v PHP a podobně je nevhodné spouštět externí programy), proto jsem tu sezbíral různé možnosti jak generovat hashe hesel.
Příklad jak volat mkpassw:
mkpasswd --hash=md5 -S blahblah foobar
blahblah je takzvaný SALT, foobar je naše heslo. Salt samozřejmě nemusíte zadávat. Nedoporučuji spouštět mkpasswd takto z příkazového řádku, protože heslo vám zustane zapsané v historii shellu a během spouštění mkpasswd ho každý může vidět ve výpisu procesů (pokud nezadáte heslo jako parametr, mkpasswd vás k jeho zadání vyzve po spuštění).
Pozor na Slackware, je v něm jiný program mkpasswd než v Debianu.
OpenSSL
Pokud v systému nenajdete program mkpasswd, můžete zkusit openssl.
openssl passwd -1 heslo
Heslo samozřejmě nemusíte zadávat jako parametr, ale můžete počkat až vás o něj openssl požádá po spuštění.
PHP
Funkce md5(text) počítá hash a používá se pro kontrolu integrity dat, nehodí se pro uložení hesla kvůli slovníkovému útoku.
Pro heslo se používá funkce crypt(heslo,salt), kde salt je pro md5-hesla “$1$ABCDEFGH$” kde ABCDEFGH je nahodnych osm znaků (velká,malá,čísla). V PHP pokud je salt prázdný řetězec, salt se vygeneruje (neplati pro staré verze).
crypt("foobar",'$1$blahblah$')
C
cc -o program program.c -lcrypt
#include <stdio.h> #include <crypt.h> #include <stdlib.h> #include <time.h> #define SALTLEN 8 static char chset[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; char *myCrypt(char *pwd) { int i; char salt[SALTLEN+5]="$1$"; srand(time(NULL)); for(i=0;i<SALTLEN;i++) salt[i+3]=chset[rand() % strlen(chset)]; salt[i+3]='$'; salt[i+4]='\0'; return crypt(pwd,salt); } int main(int argc, char *argv[]) { if (argc<2) fprintf(stderr,"Use: %s password\n",argv[0]); else printf("%s\n",myCrypt(argv[1])); return 0; }
Comments are closed.