Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.209.8] |
|
Сообщ.
#1
,
|
|
|
Вобщем нужен алгоритм который на основе входных данных типа TBytes выдавал число в диапазоне от 1 до максимума.
Мой нубский вариант ниже. Предложите чтонить более интересное ... function GetRoundsFromKey(Key: TBytes; MaxRounds: Integer): Integer; uses SynCommons; var I: Integer; S: string; K: Int64; begin S := SynCommons.crc64c( @Key[0], Length(Key) ).ToString ; for I := 0 to 40 do begin K := SynCommons.crc64c( PAnsiChar(S), Length(S) ); S := K.ToString; end; if K < 0 then while K < 0 do begin K := SynCommons.crc64c( PAnsiChar(S), Length(S) ); S := K.ToString; end; while MaxRounds < K do K := (K div 3)-MaxRounds; if K < 0 then K := K * -1; Result := K; end; Добавлено Поясню зачем это: кол-во раундов для aes на основе ключа |
Сообщ.
#2
,
|
|
|
Зачем данные копируются? Зачем к результату ещё несколько раз применяется кодирование?
В общем, любая хэш-функция или функция для контрольной суммы применяется к массиву, потом от результата берется модуль по Max значению |
Сообщ.
#3
,
|
|
|
MBo
RE: Зачем данные копируются? это из старых модификаций осталось, пока вы читали я уже поправил.)) RE: Зачем к результату ещё несколько раз применяется кодирование? для загадочности. RE: потом от результата берется модуль по Max значению Хорошая мысля, как-то не подумал про это. |