jedinečnost

Potřebuju vytvořit jedinečné soubory z e-mail adres.
Zkusil jsem to takto ..

crypt("mail@nekde.cz");

jenže jsem myslel, že vznikne jen řetězec složený
z písmen a číslic.
Bohužel se tam objevilo i lomítko.
Existuje v php nějaká funkce co by to zvládla?
http://php.ftp.cvut.cz/manual/cs/function.md5.php
vytvoří to opravdu jen alfanumeriku?
Navíc je ten řetězec dlouhej.
Co trochu vlastní snahy?

http://en.wikipedia.org/wiki/MD5
"The 128-bit (16-byte) MD5 hashes (also termed message digests) are typically represented as 32-digit hexadecimal numbers."

Žádné délkové omezení ve tvém původním dotazu nevidím.
A kdyby ne, tak:

function Char_2_AlfaNumeric($char)
{
for ($i=0; $i<StrLen($char); $i++)
{
$z[$i] = Ord(SubStr($char, $i, 1));
if (($z[$i] >= 48 && $z[$i] <= 57)
||($z[$i] >= 65 && $z[$i] <= 90)
||($z[$i] >= 97 && $z[$i] <= 122))
{$y[]=Chr($z[$i]);}
}
for ($i=0; $i<Count($y); $i++)
{$ch = Trim("$ch".$y[$i]);}
return $ch;
}
Bohužel ten script likviduje určité znaky bez náhrady.
Takže dva e-maily se s určitou pravděpodobností
můžou tvářit jako jeden.
synergik:
Nechapu te. Funkce, ktera je presne pro tohle (hashovani retezcu) urcena, je MD5, tak nevim, proc ji nechces pouzit. Argument u jine funkce, ze dva retezce mohou mit stejny hash, neni moc namiste, protoze toto plati pro vsechny hashovaci fce. Ovsem ta pravdepodobnost je naprosto minimalni, nerku-li miziva. Navic plati, ze je tim vyssi, cim kratsi je vysledny hash, takze namitka, ze je kod dlouhy- to jdes sam proti sobe. Pokud chces pomoci tohoto vytvaret jedinecne soubory, tak pouziti 32-mistneho kodu vubec nevadi (vlastne bys mohl pouzit i samotne e-mailove adresy, protoze v nich se nemuze vyskytovat jediny znak, ktery by nejak vadil pri pojmenovavani souboru v linuxu), protoze s nimi bude stejne pracovat pocitac, kteremu je to jedno.
donny má pravdu, MD5 je vhodný. Jinak ale samozřejmě funkce Char_2_AlfaNumeric() opravdu likviduje nežádoucí znaky bez náhrady, takže se může stát, že z dvou řeťězců udělá jeden shodný. Uvedl jsem to jenom pro úplnost, aby bylo vidět jak se lze nežádoucích znaků zbavit kdybys sis chtěl nějakou kryptovací funkci napsat sám. Co bude pro to nejlepší se rozhodni sám.
Sha1(); je lepsi hec! :D
crc32()
$rand = "textKterySeVamLibi";



function zkryptuj($text, $type=0) {


if($type==0) {

$pismena = explode("@", $text);


foreach($pismena as $cislo=>$pismeno) {

$return .= $hash.$pismeno.$cislo.$pismeno;

}

} else {

$pismena = explode("@", $text);


foreach($pismena as $cislo=>$pismeno) {

if($cislo==0) $i=count($cislo); else $i=$cislo;

$return .= $pismena[$i];

}

}

return $return;

}

Uziva se: zkryptuj("text", 1); nebo zkryptuj("text", 0);
1 = Vezme zadany hash, potom da tu cast explodu, pak cislo toho explodu a zas explode
0 = melo by to z neco@blabla.cz vratit necoblabla.cz@ :)
Hele, a co zkusit
str_replace('@','+',$Email)
to je přece jako název souboru vždy povolené :+)
Já bych použil md5() - ten je 32 znaků čísel '0' až '9' a písmen 'a' až 'f'.

Sice ho před cca dvěma lety rozlomila jistá čínská skupina, ale to je nám obyčejným smrtelníkům úplně jedno.

Duplicita je samozřejmě možná, ale máš 32^16 kombinací, což je bratru 1208925820000000000000000 možností.

Pokud chceš generovat md5 hash javascriptem, tak i to je jednoduše možné. Algoritmus vypadá takhle:
http://golden-samurais.wz.cz/md5.js (používá se 'var = md5(string);')
to prolomeni MD5 vubec nesnizuje jeho duveryhodnost jako jednosmerny sifrovaci algoritmus. BTW pokud potrebujes vytvorit jedinecne soubory z e-mailovych adres, staci, jak rika Elektrostraka, kdyz nahradis znaky v e-mailove adrese, ktere se nedaji pouzit v nazvu souboru, necim jinym. Pokud vim, tak na linuxu neni toto tak omezujici, jako na win, tedy muzes vytvaret soubory presne podle zneni e-mailove adresy.