Альтернативные источники энтропии

== тесты для ссылочного равенства (независимо от того, являются ли они одним и тем же объектом).

.equals() тесты для равенства значений (независимо от того, являются ли они логически «равными»).

Objects.equals () проверяет наличие null перед вызовом .equals(), поэтому вам не нужно (доступно с JDK7, также доступным в Guava ).

String.contentEquals () сравнивает содержимое String с содержимым любого CharSequence (доступно с Java 1.5).

Следовательно, если вы хотите проверить, имеет ли две строки одно и то же значение, вы, вероятно, захотите использовать Objects.equals().

// These two have the same value
new String("test").equals("test") // --> true 

// ... but they are not the same object
new String("test") == "test" // --> false 

// ... neither are these
new String("test") == new String("test") // --> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object
"test" == "test" // --> true 

// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true

// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false
Objects.equals(null, null) // --> true

Вы почти всегда хотите использовать Objects.equals(). В редкой ситуации, когда вы знаете, что имеете дело с интернированными строками, вы можете использовать ==.

Из JLS 3.10. 5. Строковые литералы :

Кроме того, строковый литерал всегда ссылается на тот же экземпляр класса String. Это связано с тем, что строковые литералы, или, в более общем смысле, строки, которые являются значениями константных выражений ( §15.28 ), «интернированы», чтобы обмениваться уникальными экземплярами, используя метод String.intern.

blockquote>

. Подобные примеры также можно найти в JLS 3.10.5-1 .

13
задан Peter C. 19 November 2008 в 02:35
поделиться

14 ответов

Статья Wikipedia о Аппаратный генератор случайных чисел списки несколько интересных источников для случайных чисел с помощью физических свойств.

Мое избранное:

  • источник излучения ядерного распада А, обнаруженный Счетчиком Гейгера, подключенным к ПК.
  • Фотоны, перемещающиеся через полупрозрачное зеркало. Взаимоисключающие события (отражение — передача) обнаружены и связаны с "0" или "1" битовые значения соответственно.
  • Тепловой шум от резистора, усиленного для обеспечения случайного источника напряжения.
  • Лавинный шум сгенерирован от лавинного диода. (Насколько прохладный это?)
  • Атмосферные помехи, обнаруженные радиоприемником, подключенным к ПК

Эти , проблемный раздел из статьи Wikipedia также описывает хрупкость большого количества этих источников/датчиков. Датчики почти всегда производят все менее случайные числа, как они стареют/ухудшают. Эти физические источники должны постоянно проверяться статистическими тестами, которые могут проанализировать сгенерированные данные, гарантировав, что инструменты не повредились тихо.

18
ответ дан Brian Gianforcaro 19 November 2008 в 02:35
поделиться
  • 1
    Когда Вы говорите " частичный compilation" я принимаю этот isn' t сделанный на времени выполнения (как напротив некоторых динамических языков, имеющих JIT). Таким образом, Вы подразумеваете, что это только работает, когда список известен во время компиляции, или это может даже оптимизировать многократное использование списка, который будет известен во времени выполнения? – Alejandro Pulver 17 December 2012 в 16:43

Некоторый ввод с клавиатуры использования (тайм-ауты между нажатиями клавиш), я слышал о, я думаю в романе, что радио-статический прием может использоваться - но конечно который требует другого аппаратного и программного обеспечения...

0
ответ дан Tim 19 November 2008 в 02:35
поделиться
  • 1
    Я думаю, что операционное поведение недетерминировано, таким образом, у Вас нет гарантий параллельного прогресса. – Don Stewart 3 December 2012 в 20:56

Шум сверху спектра Космического сверхвысокочастотного фона. Конечно, необходимо сначала удалить некоторую анизотропию, основные объекты, коррелированые шумы детекторного каскада, галактику и локальные групповые скорости, поляризация и т.д. Многие ловушки остаются .

0
ответ дан Alex 19 November 2008 в 02:35
поделиться
  • 1
    Положительная сторона @DonStewart. I' d нравится спрашивать, можно ли полагаться на него? Я имею в виду, можете Вы быть уверенными что одна искра won' t отстают от другого по некоторым причинам (или won' t быть запущенным достаточно скоро), и разрыв в конечном счете возьмет O (n) пространство? – Petr Pudlák 3 December 2012 в 20:53

Некоторые TPM (Модуль Надежной платформы) "микросхемы" имеют аппаратные средства RNG. К сожалению, (Broadcom) TPM в моем ноутбуке Dell испытывает недостаток в этой функции, но много компьютеров, проданных сегодня, идут с аппаратными средствами RNG, который использует действительно непредсказуемые квантовые процессы механического устройства. Intel реализовал разнообразие теплового шума.

кроме того, не используйте одно только текущее время для отбора RNG в криптографических целях или любого приложения, где непредсказуемость важна. Используя несколько битов низкоуровневых со времени в сочетании с несколькими другими источниками, вероятно, хорошо.

А подобный вопрос может быть полезен для Вас.

2
ответ дан Community 19 November 2008 в 02:35
поделиться

Я использовал программу шифрования, которая использовала пользовательское движение мыши для генерации случайных чисел. Единственная проблема состояла в том, что программа должна была приостановить и попросить, чтобы пользователь переместил мышь случайным образом в течение нескольких секунд для работы правильно, который не мог бы всегда быть практичным.

2
ответ дан 19 November 2008 в 02:35
поделиться

Современные RNGs и проверяются по корреляциям в соседних семенах и выполняют несколько сотен повторений после отбора. Так, к сожалению, скучный, но истинный ответ - то, что это действительно не имеет значения очень.

Вообще говоря, использование случайные физические процессы должны быть проверены, что они соответствуют равномерному распределению и иначе detrended.

, По-моему, часто лучше использовать очень хорошо понятый генератор псевдослучайного числа.

3
ответ дан Community 19 November 2008 в 02:35
поделиться

Ядро Linux использует синхронизацию прерывания устройства (мышь, клавиатура, жесткие диски) для генерации энтропии. Существует хорошее статья о Википедии на энтропии.

3
ответ дан tvanfosson 19 November 2008 в 02:35
поделиться

Не волнуйтесь о "хорошем" семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как генератор отобран. Существуют другие вещи, как бы то ни было. волноваться о. См. Ловушки в Генерации случайных чисел .

Что касается аппаратных генераторов случайных чисел, эти физические источники должны быть измерены, и измерительный процесс имеет систематические ошибки. Вы могли бы найти, что "псевдо" случайные числа имели более высокое качество, чем "реальные" случайные числа.

4
ответ дан John D. Cook 19 November 2008 в 02:35
поделиться

SGI однажды использовал фотографии лампы лавы в различных "фазах шарика" как источник для энтропии, которая в конечном счете развилась в генератор случайных чисел с открытым исходным кодом, названный LavaRnd.

8
ответ дан Turnkey 19 November 2008 в 02:35
поделиться
  • 1
    Так, эти a,b ->, просто передает значения a и b к компаратору? – F21 25 September 2012 в 00:45

Я использую Random.ORG , они обеспечивают свободные случайные данные из Атмосферных помех, которые я использую для периодического пересевания Mersene-Twister RNG. Его почти столь случайный, как можно добраться без аппаратных зависимостей.

5
ответ дан Robert Gould 19 November 2008 в 02:35
поделиться

Я нашел HotBits несколько лет назад - числа сгенерированы от радиоактивного распада, действительно случайный числа.

существуют пределы на то, сколько чисел можно загрузить день, но меня всегда развлекало использовать их как действительно, действительно случайные семена для RNG.

2
ответ дан Ken Gentle 19 November 2008 в 02:35
поделиться
  • 1
    @F21: Да, вид. It' s как функция, которая берет два параметра и привыкла к виду согласно телу функции, которое возвращает оператор космического корабля. – João Silva 25 September 2012 в 07:31

Источник семени не так очень важен. Более важный псевдо алгоритм генератора чисел. Однако я услышал некоторое время назад о генерации семени для некоторых банковских операций. Они взяли много факторов вместе:

  • время
  • температура процессора
  • скорость вентилятора
  • напряжение CPU
  • я не помню больше :)

, Даже если некоторые из этих параметров не изменяются очень вовремя, можно поместить их в некоторую хорошую хеш-функцию.

, Как генерировать хорошее случайное число?

, Возможно, мы можем принять во внимание inifinite количество вселенных? Если это верно, это все время, новые параллельные вселенные создаются, мы можем сделать что-то вроде этого:

int Random() {
    return Universe.object_id % MAX_INT;
}

В каждый момент мы должны быть на другом ответвлении параллельных вселенных, таким образом, у нас должен быть другой идентификатор. Единственная проблема состоит в том, как получить объект Вселенной :)

0
ответ дан klew 19 November 2008 в 12:35
поделиться
  • 1
    Интересно, можно использовать искры для вычисления sum и len параллельно, также избегая O (n) пространство. – Don Stewart 4 December 2012 в 07:50

не волнуются о "хорошем" семени для генератора случайных чисел. Статистические свойства последовательности не зависят от того, как генератор отобран.

я не соглашаюсь с совет John D. Cook . При отборе вихря Мерсенна со всеми битами, обнуленными кроме одного он первоначально генерирует числа, которые совсем не случайны. Требуется много времени, чтобы генератор взболтал это состояние во что-либо, что прошло бы статистические тесты. Просто установка первых 32 битов генератора к семени будет иметь подобный эффект. Кроме того, если все состояние будет обнулено, то генератор произведет бесконечный, обнуляет.

Правильно написанный код RNG будет иметь правильно записанный алгоритм отбора, который принимает, говорят, что 64 битовых значения и отбирают генератор, таким образом, это произведет достойные случайные числа для каждого возможного входа. Таким образом, если Вы будете пользоваться надежной библиотекой затем, то любое семя сделает. Но если Вы взламываете вместе свою собственную реализацию затем, необходимо быть осторожными.

0
ответ дан Cody Gray 19 November 2008 в 12:35
поделиться
  • 1
    @user1871626 там являются системами, способными к компиляции во время выполнения, как, например, языку Common LISP. Это сделано явно там, например, наличие функции fun, можно звонить (compile 'fun) (при подсказке REPL, сказать), и это компилируется, и скомпилированный код связан во время выполнения. Метод подготовки соответствовал бы там приятно. Имея быть скомпилированным, функция воплощает предварительно обработанное знание списка, и применение (несколько раз) таким образом скомпилированная функция более эффективна, как книга, с которой Вы связались, объясняет. – Will Ness 18 December 2012 в 07:32

Как насчет остановки потока, который будет манипулировать некоторой переменной в жестком цикле в течение фиксированного промежутка времени, прежде чем он будет уничтожен. То, что вы получите, будет зависеть от скорости процессора, загрузки системы и т. Д. Очень странно, но лучше, чем просто srand (time (NULL)) ...

0
ответ дан 1 December 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: