• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zu hash()

xXxPeterPanxXx

Neues Mitglied
Hi,
kann man als ersten Parameter der Funktion hash() einen Array nehmen, in etwa so?

PHP:
while ($algo = array(*/alle hashformen z.B md5, md4, md2 usw.)*/) {
hash($algo, $string)
}
Ist das möglich?

MfG xXxPeterPanxXX
 
Ausprobieren wäre blöd, da der Code, den ich schreiben will etwas größer wird.

Ich könnte doch den den Array mit implode zu einem String umwandeln.

PHP:
$string = implode(',', $array)
Das dürfte gehen oder?

MfG xXxPeterPanxXx
 
Theoretisch ja. Aber ausprobieren kannst Du es auch - mit einem Mini-Beispiel. Nicht in deinem fertigen Code :P
 
Ich erzeuge immoment nur eine Endlosschleife:

PHP:
<?php
$array = array("md5" => "md5", "md4" => "md4");
$hallo = 'hallo';
while($string = implode(',', $array)) {
$hash = hash($string, $hallo);
echo $hash;
}
?>
 
Hey Danke,

leider geht immernoch nicht ganz. So wie ich die Fehlermeldung verstehe ist in $string nicht nur ein Hashing Algorithm, wie md5 gespeichert sondern gleich zwei, wie md5, md4.

Das sollte mit der while Schleife eigentlich verhindert werden.

Den Array habe ich so abgeändert:

PHP:
$array = array("md5", "md4");

Die Fehlermeldung:

Warning: hash() [function.hash]: Unknown hashing algorithm: md5,md4 in /is/htdocs/wp1158326_JHB43K6EP5/www/coder/tools/md5-sha1-encrypter/test.php on line 6

MfG xXxPeterPanxXx
 
Das Problem hatte ich auch mal:
PHP:
<?php
$array = array("md5" => "md5", "md4" => "md4");
$hallo = 'hallo';
// Arraydaten in einen String setzen und mit , trennen
$i = 0;
$s = null;
foreach($array as $alg) {
if($i > 0) {
$s .= ",";
}
$s .= $alg;
$i++;
}
$im = explode(',', $s);

//hashes ausführen
echo "<ol>";
foreach($im as $string) {
$hash = hash($string, $hallo);
echo "<li>".$hash."</li>";
}
echo "</ul>";
?>
Habs mal etwas ausgeschmückt zur verständlichkeit ;-)
Problem ist das bei jedem While durchlauf bei dir das implode neu gesetzt wird und wieder bei index 0 beginnt :)
 
Loooloooollllloooooolololooool... :-D *sry* ^^

ok also du erstellst ein array um es aufwändig zu einem string zusamenzusetzen und dann wieder zu teilen?
ich glaube hier liegt eher ein verständniss problem vor.

Die funktion Hash erwartet 2 Parameter. Als erstes das Hash verfahren nd als zweites die daten die gehasht werden sollen.
Als hash verdahren kann nur eines angegeben werden also ist es nicht möglich die alle zusammenzufügen sondern allerhöchstens mit allen verfahren nacheinander zu hashen was aber auch nicht besondersn sinvoll ist mit mehr als 2 verfahren.

so könnte es gehen

PHP:
$sData = 'some test data .... bla bli blub';
$aHashAlgs = array('sha512', 'sha1');

foreach($aHashAlgs as $sHashAlg) {
    $sHash = hash($sHashAlg, $sData);
}

echo '<pre>' . $sHash . '</pre>';
 
...mit allen verfahren nacheinander zu hashen was aber auch nicht besondersn sinvoll ist mit mehr als 2 verfahren.

Ja, falls das hier die Absicht ist, ist das ist in der Tat nicht besonders sinnvoll und macht das Resultat häufig *um Längen unsicherer*.

(Edit: "Unsicherer" ist ein relativer Begriff. Dann muss die Nadel vielleicht nicht mehr in Deutschland gesucht werden, sondern nur noch in Bayern. Fast unmöglich bleibt es trotzdem, aber es ist dennoch ein gewaltiger Unterschied. Ich behaupte, sowas ist für Laien kaum beurteilbar, aber ich kenne mich da auch nicht ansatzweise mit aus.)

Ich greife mal ein Zitat aus der PHP-Doku zu sha1 heraus, das ich gerade noch im Kopf habe:

Double hashing is *worse* security than a regular hash. What you're actually doing is taking some input $passwd, converting it to a string of exactly 32 characters containing only the characters [0-9][A-F], and then hashing *that*. You have just *greatly* increased the odds of a hash collision (ie. the odds that I can guess a phrase that will hash to the same value as your password).

sha1(md5($pass)) makes even less sense, since you're feeding in 128-bits of information to generate a 256-bit hash, so 50% of the resulting data is redundant. You have not increased security at all.

Eine einzige gesalzene Hash-Funktion (vorzugsweise eine von den sha's mit möglichst hoher Nummer) sollte passen.
 
Zuletzt bearbeitet:
Ich weiß! :D Ich habe etwas anderes vor. hehe

Ich habe grad das Problem das ich in dem array einen String, in dem sich ein Komma, dadurch wird der String geteilt ohne das es gewollt ist.

Bisher hatte ich nur die Idee, dass ich einen Platzhalter, wie +, verwende der dann durch str_replace zu einem echtem Komma wird. Dafür brauche ich aber noch eine Schleife, gibt es keine bessere Lösung?

MfG xXxPeterPanxXx
 
Ich bin nicht sicher, ob ich deine Frage verstanden habe. Eventuell würde sich PHP: array_map - Manual anbieten, wenn du keine Schleife verwenden willst:

PHP:
<?php
$array = array('foo+bar', 'blabla', 'test+test',);

function callback($string) {
  return str_replace('+', ',', $string);
}

echo '<pre>', print_r(array_map('callback', $array)), '</pre>';

Ich habe etwas anderes vor. hehe
Sagst du uns, was?
 
Zurück
Oben