PHP bir tuz oluşturma

6 Cevap php

Ne nadiren tipik PHP tesisler dahil kütüphaneler bağlı olmadan, PHP bir kriptografik olarak güvenli 32 byte tuz oluşturmak için en iyi yolu nedir?

Bazı googling sonra mt_rand yeterince güvenli kabul edilmez, ama değiştirilmesi için bir öneri bulamadım keşfetti. Bir makale /dev/random ama sadece bu pencere üzerinde çalışmaz okuma önerdi; Ayrıca, very yavaştır.

Ben (/dev/random genellikle yaptığı gibi, yani bu, 512 bayt oluşturmak için 20 saniye almamalıdır) güvenlik ve hız arasında makul bir denge istiyorum

6 Cevap

PHP Sürüm 5.3 da (Unix üzerinde değil sadece) bir Windows sunucu üzerinde rasgele kaynağını kullanan beri, işlevi mycrypt_create_iv() kullanabilirsiniz. Sabiti MCRYPT_DEV_URANDOM tanımlı ise bunu kullanmadan önce kontrol etmelisiniz.

mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);

Yeterli entropi mevcut yoksa rastgele aksine, urandom, sunucu engellemez. Şifre tuz (mutlaka rastgele değil) benzersiz olmalıdır yana, urandom benim için iyi bir seçim gibi görünüyor.

uniqueid is not well suited for generating a random string as it too is microtime based. A CPU Cycle is generally much shorter than a microtime-tick, which may lead to possible constancy for a given variable within loops. Setting the second parameter "entropy" to true,

 uniqid('', true)

Artan rasgelelik sağlayacaktır.

Çoğu karakter setleri ile de uyumlu olan rasgele bir dize almak için, bir mcrypt initilization vektör fonksiyonu base64 kodlaması uygulamak mcrypt_create_iv olabilir:

$length = 16;
base64_encode(mcrypt_create_iv(ceil(0.75*$length), MCRYPT_DEV_URANDOM))
//> hlZuRJypdHFQPtI2oSFrgA==
strlen(base64_encode(mcrypt_create_iv(ceil(0.75*$length), MCRYPT_DEV_URANDOM)))
//> 16

2 ^ 6Bit için karakter alfabe azaltılması için yukarıdaki muhasebeleştirilir boyutunu artırır.

uniqid() bu amaç için iyi olmalı.

/dev/urandom okuyabilir, ya da kullanmak openssl_random_pseudo_bytes().

I microtime() yeterli olduğunu düşünüyorum.

Garip, ama ben yine de bu cevap için downvotes alıyorum.

Though the only explanation I get is that microtime is predictable.
It sounds strange to me as salt always assumed as openly known - so, there is no use for prediction at all.