Karma kullanılmak için bir rasgele, değişken uzunluk tuzunu yapmak için PHP bir yolu nedir? Ben bunu nasıl yaparım - Hadi ben 16 karakter uzunluğunda tuz yapmak istiyorum diyelim?
mcrypt extension mevcut ise sadece kullanmak mcrypt_create_iv(size, source) bir tuz oluşturmak için olabilir.
$iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
var_dump($iv);
"String" her byte 0-255 aralığında olabilir çünkü bunu kaydetmek / almak için ikili güvenli işlev gerekir.
İşletim sisteminize bağlı olarak, gibi bir şey:
$fh=fopen('/dev/urandom','rb');
$salt=fgets($fh,16);
fclose($fh);
Rastgele ve urandom davranışları üzerinde okumak etmeyin.
Diğerleri doğru işaret ederken orada md5 ve tekrarlanan karma ile bazı sorunlar, şifreler (yani nispeten kısa dizeler) için kaba kuvvet saldırıları bakılmaksızın karma algoritması nasıl sofistike zaman aynı miktarda alacak.
C.
Burada rasgele dize oluşturmak için bir işlevi bulunur:
/* random string */
function rand_string( $length ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
$str .= $chars[ rand( 0, $size - 1 ) ];
}
return $str;
}
Uzun olmalı, ve rastgele olmalıdır: Orada iyi bir tuz için iki önkoşul vardır. Bunu gerçekleştirmek için pek çok yol vardır. Örneğin, microtime
ve rand
bir arada kullanabilirsiniz, ancak tuz benzersiz olmasını sağlamak için daha büyük çaba gidebilir.
Bir çarpışma şansı önemsizdir iken, MD5 veya diğer çarpışma eğilimli algoritmalar ile tuz karma tuzlu hiçbir nedenle benzersiz olduğunu şansını azaltacaktır unutmayın.
EDIT: Yedek rand()
için mt_rand()
. Michael belirtildiği gibi, rand
daha iyi.