TEA постоянный алгоритм 0x9e3779b9, который, как говорят, получен из золотого отношения, но золотое число составляет 1,618?

Я пытаюсь понять константу 0x9e3779b9.

Что это за данные? Это не двоичный, а не десятичный, что это?

Это константа, используемая для алгоритма TEA. Он говорит, что он получен из золотого номера , но золотое число - 1,618?

6 голосов | спросил pandr01d 30 MarpmWed, 30 Mar 2011 17:13:55 +04002011-03-30T17:13:55+04:0005 2011, 17:13:55

4 ответа


11

Как говорили другие, константа представляет собой целое число в шестнадцатеричной форме. В частности, это 32-разрядное целое число в шестнадцатеричной форме. Если константа представляет собой целое число со знаком, то 0x9e3779b9 является отрицательным 1640531527 десятичным в форме дополнения к двум; следовательно, это может быть масштабированная целочисленная дробь, которая была скорректирована для решения нецелого из 2 связанных проблем.

Дополнение от 2 до отрицательного к положительному преобразованию в hex

0x9e3779b9 ⊕ 0xffffffff + 0x00000001 = 0x61C88647 = 1640531527 in decimal

или используя оператор дополнения 1 в ~ семействе языков C

~0x9e3779b9 + 0x00000001 = 0x61C88647 = 1640531527 in decimal 

Дополнение двоичного дополнения к положительному преобразованию в двоичном формате

10011110001101110111100110111001 ⊕ 11111111111111111111111111111111 + 00000000000000000000000000000001 =  01100001110010001000011001000111 = 1640531527 in decimal
ответил bit-twiddler 30 MarpmWed, 30 Mar 2011 18:08:50 +04002011-03-30T18:08:50+04:0006 2011, 18:08:50
32

Я думаю, что этот вопрос StackOverflow отвечает на него:

https://stackoverflow.com/questions/4948780/magic-numbers-in-boosthash зернокомбайна

По сути, это магическое число, полученное из иррационального числа Golden Ratio, с помощью шагов:

    phi = (1 + sqrt(5)) / 2 = 1,6180339887498948482045868343656.
  1. Затем после этого вычисляется 2^32 / phi, что приводит к 2 654 435 769,4972302964775847707926

  2. Усечь его, чтобы иметь только свою целую часть 2 654 435 769

  3. Преобразуйте его в шестнадцатеричный, и вы получите 9E37 79B9 (В калькуляторе Windows выберите Qword)

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

Обозначение 0x для hexadecimal или base 16. Преимущество базового числа 16 состоит в том, что каждая пара цифр представляет собой один байт в точности. Учитывая небольшую практику, вы можете почти увидеть битовую схему в своем уме, предполагая, что вы когда-либо работали с двоичными числами.

ответил Berin Loritsch 30 MarpmWed, 30 Mar 2011 17:29:09 +04002011-03-30T17:29:09+04:0005 2011, 17:29:09
2

Число исходит из шестнадцатеричного представления золотого отношения.

Так же, как 1/4 есть 0.25 (25/100) в десятичном формате 0.4 ( 4/16) в шестнадцатеричной форме, дробная часть золотого отношения имеет другое представление в шестнадцатеричном формате, чем в десятичном значении.

Вы не делите 0x9e3779b9 на 10^8, но 16^8 (или 2/32 ) и 0x9e3779b9/0x100000000 = 2654435769/4294967296 ≈ 0.6180339886

ответил SomeRandomGuy 5 J000000Sunday15 2015, 12:05:47
0

Как указывали другие и здесь, https://stackoverflow.com/questions/4948780/magic-numbers-in-boosthash-comb , число действительно построено из золотого отношения.

Но есть еще одна важная причина: почему числа, такие как pi, phi или e, используются в криптографических функциях. Конечно, в принципе любая «разумно случайная» последовательность бит может использоваться как константа. Но это ставит создателя функции под подозрение наличия значения designedered , например. для того, чтобы создать определенную слабость в алгоритме (известном только ему), который он может использовать при использовании своей функции.

Построим значение из известных «естественных» констант, такое подозрение можно в некоторой степени отбросить.

ответил mindriot 21 J000000Tuesday15 2015, 23:34:38

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132