powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Rand
7 сообщений из 7, страница 1 из 1
Rand
    #36493768
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В РВ есть псевдогенератор случайных чисел.
Код: plaintext
1.
2.
integer i, k, n
Randomize(k)
i = Rand(n)
1. Какой длины цикл до начала повторения, взависимости от значении n?
2. Можно ли как-то зная i и n найти k? Либо есть другой какой-то ГСЧ, чтобы можно было делать такие вычисления (например, откат назад)?
...
Рейтинг: 0 / 0
Rand
    #36495024
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
используй счетчик если надо знать сколько прошло итераций...
--
вопросы какие-то непонятные.
...
Рейтинг: 0 / 0
Rand
    #36495716
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISВ РВ есть псевдогенератор случайных чисел.
Код: plaintext
1.
2.
integer i, k, n
Randomize(k)
i = Rand(n)
1. Какой длины цикл до начала повторения, взависимости от значении n?
2. Можно ли как-то зная i и n найти k? Либо есть другой какой-то ГСЧ, чтобы можно было делать такие вычисления (например, откат назад)?

Ф-я PB Rand реализована внутри через функцию rand() из C:
Код: plaintext
1.
2.
3.
int pbrand(int n) 
{
  return rand() % n +  1 ;
}

Сама сишная ф-я rand реализована так
Код: plaintext
1.
2.
3.
4.
int rand()
{
  seed = seed *  214013  +  2531011 ;
  return (seed >>  16 ) & 0x7fff;
}
seed - это глобальная переменная, чье первоначальное значение устанавливает randomize() (srand() в С)

Теперь ответы на вопросы.
а) У этого генератора период - 2^32 (специально подобранные константы)
б) Из-за потери младших 16 битов при возврате результата, невозможно однозначно узнать seed имея результат функции.
в) Однако учитывая простоту ф-и, вполне можно перебором найти множество чисел являющихся ответом на ваш вопрос. Более того перебор можно существенно сократить используя методы криптоанализа.

Только я одного не понял - а зачем все это?
...
Рейтинг: 0 / 0
Rand
    #36495915
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky ,
большое спасибо за информацию.

Причина в том, что нравится мне MD5 и именно тем, что при любом изменении входного значения "лавинообразно" меняется значение выходного. Но длинна выходного значения большая.

Есть мысль генерировать подобным образом первичный ключ в таблице(M) БД. Т.е. если на вход "MD5" подать значения этих ключей (от 1 до 10^?), то все они будут одной длины и практически не смогут быть упорядочены и ассоциированы с реальными их значениями.

И тут мне кажется :), что если БД у меня в "открытом виде", то доступ к таблице(M) с важной информацией можно сделать наподобие "входа по паролю". Т.е. пароль - это внешний ключ в таблице(Х), хеш которого - есть первичный ключ в таблице(M).
Есть скрипт с подобной "лавинообразной" характеристикой MD5, но длиной от 4 до 8 символов и установкой параметров кодирования. Используются эти функции РВ.
От сюда и интерес: можно ли "откатиться назад"? Есть ли вероятность повтора при заданном кол-ве перв.ключей? Ну, и т.д.
...
Рейтинг: 0 / 0
Rand
    #36496215
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISЕсть мысль генерировать подобным образом первичный ключ в таблице(M) БД. Т.е. если на вход "MD5" подать значения этих ключей (от 1 до 10^?), то все они будут одной длины и практически не смогут быть упорядочены и ассоциированы с реальными их значениями.

И тут мне кажется :), что если БД у меня в "открытом виде", то доступ к таблице(M) с важной информацией можно сделать наподобие "входа по паролю". Т.е. пароль - это внешний ключ в таблице(Х), хеш которого - есть первичный ключ в таблице(M).

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

Вот например алгоритм шифрования 3DES имеет размер блока 8 байт, с помошью чего можно шифровать числа до 2^64. Для хранения такого зашифрованного числа можно использовать либо NUMERIC(20) либо VARCHAR(12) (base64) либо BIGINT.

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

А у Rand() не смотря на то что период - 2^32 но повторы встречаются гораздо чаще: не реже чем 1 на 32768 значений.
...
Рейтинг: 0 / 0
Rand
    #36496404
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky ,
шифрование уже рассматривал (но правда не 3DES).
Был минус в тех вариантах, которые рассматривал:
- длина выходного значения "соответствует" длине входного и нет "лавинообразного" изменения выходного значения, и следовательно последовательность вых.ключей можно отсортировать и, зная значения вход.ключей, уже предсказать "что где".
Основная сложность (как мне кажется) в поиске решения этой задачи, что известны значения вход. и вых. ключей и поэтому тут даже дешифрировать возможно не придеться, а просто найти соответствие ключей (тем более что это 1 к 1-му).

P.S. За подсказку про 3DES, спасибо. Почитаю.
...
Рейтинг: 0 / 0
Rand
    #36496553
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
шифрование уже рассматривал (но правда не 3DES).
Был минус в тех вариантах, которые рассматривал:
- длина выходного значения "соответствует" длине входного и нет "лавинообразного" изменения выходного значения,
Это вы что-то не то рассматривали.
Любой криптостойкий алгоритм шифрования дает настолько мизерную корелляцию между входом и выходом, что не существует никаких способов кроме перебора всех вариантов ключей для расшифровки. Например в 3DES это 2^112 вариантов, что исключает возможность перебора в разумное время.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Rand
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]