В Java и C # (в отличие от C ++) все расширяет Object, поэтому классы коллекций, такие как ArrayList, могут содержать Object или любого из его потомков (в основном что угодно).
Однако по соображениям производительности примитивам в Java или типам значений в C # был присвоен особый статус. Они не объект. Вы не можете сделать что-то вроде (в Java):
7.toString()
, хотя toString является методом для Object. Для того, чтобы связать этот узел с производительностью, были созданы эквивалентные объекты. AutoBoxing удаляет стандартный код необходимости помещать примитив в его класс-обертку и извлекать его снова, делая код более читабельным.
Разница между типами значений и объектами в C # более серая. См. здесь о том, как они отличаются.
Я настоятельно рекомендую настроить таргетинг на / dev / urandom в системах unix или на crypto-api на платформе Windows в качестве источника энтропии для паролей.
Я не могу не подчеркнуть важность понимания хэши НЕ являются волшебными устройствами увеличения энтропии. Неправильное их использование таким образом не более безопасно, чем использование данных seed и rand () до их хеширования, и я уверен, что вы понимаете, что это не очень хорошая идея. Семя отменяет (детерминированный mt_rand ()), поэтому нет никакого смысла даже включать его.
Люди думают, что они сообразительны и сообразительны, и результатом их труда являются хрупкие системы и устройства, которые ставят безопасность их системы и безопасность других систем (из-за плохих советов) в ненужной опасности.
Две ошибки не делают правильного. Система настолько сильна, насколько сильна ее самая слабая часть. случайный IV для блочного шифра, случайная соль для хэша пароля) mt_rand () - плохой источник. На большинстве платформ Unix / Linux и / или MS-Windows вы можете получить более высокий уровень псевдослучайных битов из ОС или системной библиотеки, например:
Php случайный 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 в вашем коде, хотя каждая из них не будет работать на платформе другого. Оставьте их там обоих, чтобы ваш код был более переносимым ".