Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: DHash

d-hunter [21.03.2007 16:56:47]

#

Astetta vahvempaa tiivistystä. Toiminta on selitetty tarkemmin kommenteissa. Testailla voit osoitteessa: http://dh.suncomet.org/hash/

<?php

/*

~ DHash ~ Kirjoittanut: d-hunter ~
Funktiolla on mahdollista luoda eri pituisia tiivisteitä annetusta merkkijonosta.
Tiivisteen pituus on käytännössä rinnastettavissa sen vahvuuteen, joten funk-
tion avulla on periaatteessa mahdollista luoda tiivisteitä, jotka ovat realis-
tiselta kannalta ajateltuna mahdottomia purkaa.

Käyttö:
dhash( merkkijono [, vahvuus ] )

Palautettavat arvot:
tiiviste ($out)

*/

function dhash ($pas, $str = "32") {

	// Jos vahvuus on suurempi kuin merkkijonon pituus, täytetään ylimääräiset paikat luvuilla
	if(strlen($pas) < $str)
	{
		//Lasketaan tarvittavien lukujen määrä
		$numbam = $str - strlen($pas);

		// Kieputetaan silmukalla lukuja merkkijonon perään tarvittava määrä
		for($o = 0; $o < $numbam; $o++)
		{
			$pas = $pas . $o;
		}
	}

	// Pääsilmukka, joka luo itse tiivisteen
	for($i = 0; $i < $str; $i++)
	{
		// Lopulliseen tiivisteeseen lisätään merkkijonoja vaihe vaihteelta. Tyylinä toimii: t-te-tes-testi.
		$has = substr($pas, 0, $i);

		$out .= sha1(sha1($pas . $str) . strlen($pas) . md5($has));
	}

	// Palautetaan $out
	return $out;

	// Siivotaan funktiot bittiavaruuteen
	unset($numb, $i, $has, $out, $str, $numbam);
}

/*

~ DCheckHash ~ Kirjoittanut: d-hunter ~
Funktion avulla on mahdollista verrata tiivistettä alkuperäiseen merk-
kijonoon. Funktio laskee ensin tiivisteen pituudesta sen vah-
vuuden, jonka jälkeen se vertaa sitä toiseen tiivisteeseen.
Tiivistelmien täsmätessä palauttaa true-arvon, muutoin false-
arvon.

Käyttö:
dcheckhash ( merkkijono , tiivistelmä )

Palautettavat arvot:
true, false

*/

function dcheckhash ($pass,$hash) {

	// Lasketaan tiivisteen vahvuus
	$str = strlen($hash) / 40;

	// Verrataan tiivisteitä ja palautetaan sopivat arvot
	if($hash == dhash($pass, $str))
	{
		return true;
	}
	else
	{
		return false;
	}

}

?>

Vastaus

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

Tietoa sivustosta