g++ -W -Wall -Werror
будет отображать все ошибки и возможные предупреждения и рассматривать их как ошибки.
как насчет uniqid
? в документации есть пример того, как его можно использовать для файлов cookie / сеансов.
В зависимости от вашей платформы вы можете использовать / dev / urandom или CAPICOM. Это красиво резюмировано в этом комментарии Марка Сикофа :
«Если вам нужны псевдослучайные биты для целей безопасности или криптографии (яйцо, случайный IV для блочного шифра, случайная соль для хеша пароля) mt_rand () - плохой источник. На большинстве платформ Unix / Linux и / или MS-Windows вы можете получить лучшую оценку псевдослучайных битов из ОС или системной библиотеки, например:
php // получаем 128 псевдослучайных битов в строке из 16 байтов $ pr_bits = ''; // Платформа Unix / Linux? $ fp = @fopen ('/ dev / urandom', 'rb'); if ($ fp! == FALSE) { $ pr_bits. = @fread ($ fp, 16); @fclose ($ fp); } // Платформа MS-Windows? if (@class_exists ('COM')) { // http://msdn.microsoft.com/en-us/library/aa388176(VS.85).aspx пытаться { $ CAPI_Util = новый COM ('CAPICOM.Utilities.1'); $ pr_bits. = $ CAPI_Util-> GetRandom (16,0); // если мы запрашиваем двоичные данные, PHP изменяет их, поэтому мы // запрашиваем возвращаемое значение base64. Мы выдавливаем // избыточность и бесполезность == CRLF путем хеширования ... если ($ pr_bits) {$ pr_bits = md5 ($ pr_bits, TRUE); } } catch (исключение $ ex) { // эхо 'Исключение:'. $ ex-> getMessage (); } } if (strlen ($ pr_bits) <16) { // делаем что-нибудь, чтобы предупредить владельца системы, что // псевдослучайный генератор отсутствует } ?>
NB: как правило, безопасно оставить в вашем коде как попытку чтения / dev / urandom, так и попытку доступа к CAPICOM, хотя каждая из них будет терпеть неудачу на платформе другого. Оставьте их обоих там, чтобы ваш код был более переносимым ».
Совершенно неожиданно: возьмите микровремени, умножьте его на микровремя% 100 и сделайте несколько случайных операций на sha1 полученного результата.