Я использую следующий код в установщике моего приложения. Он принимает 128 байтов случайных данных (преобразованных в шестнадцатеричную строку) и принимает по два символа за раз, преобразует их в десятичный и проверяет, что они находятся в приемлемом диапазоне (буквенно-цифровой, с символами, без пробелов или символов, которые не будут играть хорошо с вашим редактором или конфигурационным файлом - иначе нет ')
32 символа - 128 бит, поэтому он хорошо работает с блочным шифром.
function random_key_string() {
$source = bin2hex(openssl_random_pseudo_bytes(128));
$string = '';
$c = 0;
while(strlen($string) < 32) {
$dec = gmp_strval(gmp_init(substr($source, $c*2, 2), 16),10);
if($dec > 33 && $dec < 127 && $dec !== 39)
$string.=chr($dec);
$c++;
}
return $string;
}