Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Генерация случайного числа / 21 сообщений из 21, страница 1 из 1
07.07.2017, 13:14
    #39484482
sqr_khv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
Добрый день. Подскажите пжл по такому вопросу. Есть задача генерировать случайное число от 1000 до 9999, при этом нужно исключать последовательность или одни и те же числа (т.е. 1111, 2222, 1234, 4321 и т.д. - такие числа надо игнорировать). Так возможно сделать? Про dbms_random в курсе, только как исключать такие - не могу придумать...

Зачем это нужно - мне необходимо генерировать ПИН платежной карты. Если делать через HSM, то так не получится (пробовал на Java) - после получения ПИН блока нельзя получить "чистый" ПИН, т.к. из-за соображений безопасности не дает дешифровать.
...
Рейтинг: 0 / 0
07.07.2017, 13:15
    #39484485
Генерация случайного числа
sqr_khv,

просто сравни, их же всего то 10
...
Рейтинг: 0 / 0
07.07.2017, 13:16
    #39484487
sqr_khv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
не усложняй, а по другому нельзя? :)
...
Рейтинг: 0 / 0
07.07.2017, 13:17
    #39484489
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
не усложняйsqr_khv,

просто сравни, их же всего то 10С последовательностями несколько больше.
...
Рейтинг: 0 / 0
07.07.2017, 13:23
    #39484493
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
sqr_khv,

Я бы наверно составил таблицу всех возможных ПИНов, а потом из нее удалил недопустимые.
И затем выбирал бы строку таблицы со случайным номером.
Это даст преимущество в том, что если правила будут меняться (например решат, что "зеркальные" тоже нельзя), то их проще будет "удовлетворить"
...
Рейтинг: 0 / 0
07.07.2017, 13:44
    #39484519
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
create or replace function GetPin return varchar2 as
l_pin number;

function IsCorrect(p_pin number) return boolean as
l_d1   number;
l_d2   number;
l_d3   number;
l_d4   number;
l_sign number;
begin
    l_d1 := trunc(    p_pin / 1000       );
    l_d2 := trunc(mod(p_pin,  1000) / 100);
    l_d3 := trunc(mod(p_pin,  100)  / 10 );
    l_d4 :=      (mod(p_pin,  10 )       );

    l_sign := sign(l_d1 - l_d2);

    if (l_d1 = l_d2 and l_d2 = l_d3 and l_d3 = l_d4) or
       (l_sign = sign(l_d2 - l_d3) and l_sign = sign(l_d3 - l_d4) and abs(l_d1 - l_d2) = 1 and abs(l_d2 - l_d3) = 1 and abs(l_d3 - l_d4) = 1) then
        return false;
    end if;

    return true;
end;

begin
    loop
        l_pin := trunc(dbms_random.value(1000, 9999));
        exit when IsCorrect(l_pin);
    end loop;

    return to_char(l_pin);
end;
/

Функция создана.

Затрач.время: 00:00:00.05

select GetPin
from dual
connect by level <= 30;

GETPIN
-----------------------------------------------------------------------------------------------------------------------------------------------------
8680
9276
6812
6502
9067
5375
8993
7976
7136
4704
4498
9560
3015
3173
4105
3069
3960
8859
4736
9515
9516
1937
6398
7136
2491
2850
3779
2166
4546
9160

30 строк выбрано.

...
Рейтинг: 0 / 0
07.07.2017, 14:30
    #39484571
sqr_khv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
AmKad, спасибо! В понедельник потестирую её. Это намного лучше, чем предлагают выше.
...
Рейтинг: 0 / 0
07.07.2017, 14:38
    #39484582
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
sqr_khvAmKad, спасибо! В понедельник потестирую её. Это намного лучше, чем предлагают выше.
Не намного.
Держать табличку < 10000 коротких строк - вообще никаких проблем, а по управляемости (правилам) - сплошной профит.
Заодно наглядно (путем count(*)) увидите, насколько сократили перебор потенциальному злоумышленнику.
...
Рейтинг: 0 / 0
07.07.2017, 14:41
    #39484586
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
sqr_khv,

как знать...

позволю себе немного "улучшить" этот фрагмент:

Код: plsql
1.
2.
3.
4.
5.
    l_sign := sign(l_d1 - l_d2);
    if (l_d1 = l_d2 and l_d2 = l_d3 and l_d3 = l_d4) or
       (l_sign = sign(l_d2 - l_d3) and l_sign = sign(l_d3 - l_d4) and abs(l_d1 - l_d2) = 1 and abs(l_d2 - l_d3) = 1 and abs(l_d3 - l_d4) = 1) then
        return false;
    end if;



так проще:
Код: plsql
1.
2.
3.
4.
5.
    l_delta := l_d1 - l_d2;
    if (l_d1 = l_d2 and l_d2 = l_d3 and l_d3 = l_d4) or
       (l_d2 - l_d3 = l_delta and l_d3 - l_d4 = l_delta then
        return false;
    end if;
...
Рейтинг: 0 / 0
07.07.2017, 14:41
    #39484589
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
sqr_khvнужно исключатьЛюбые ограничения на пароли это снижение числа вариантов для брутфорса.
...
Рейтинг: 0 / 0
07.07.2017, 14:43
    #39484592
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
вернее правильней так:
Код: plsql
1.
2.
3.
4.
5.
l_delta := l_d1 - l_d2;
    if (l_d1 = l_d2 and l_d2 = l_d3 and l_d3 = l_d4) or
       (abs(l_delta) = 1 and l_d2 - l_d3 = l_delta and l_d3 - l_d4 = l_delta) then
        return false;
    end if;
...
Рейтинг: 0 / 0
07.07.2017, 15:44
    #39484679
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
-2-,

Брутфорс в данном случае не применим. Пин используется только в терминалах и банкоматах, а там допустимо весьма ограниченное количество попыток, а затем карта блокируется.
...
Рейтинг: 0 / 0
07.07.2017, 16:22
    #39484723
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
Помимо авторизации в банкоматах бывает еще возможность смены пина. Некоторые банки также дают сменить пин по телефону через тональный набор.
...
Рейтинг: 0 / 0
07.07.2017, 16:43
    #39484753
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
coborhc,

При наличии видеоряда с рукой над клавиатурой терминала, знание об ограничениях позволяет отсечь варианты.
...
Рейтинг: 0 / 0
07.07.2017, 17:03
    #39484768
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
sqr_khvДобрый день. Подскажите пжл по такому вопросу. Есть задача генерировать случайное число от 1000 до 9999, при этом нужно исключать последовательность или одни и те же числа (т.е. 1111, 2222, 1234, 4321 и т.д. - такие числа надо игнорировать)а что такое "одни и те же числа" в твоём примере
...
Рейтинг: 0 / 0
07.07.2017, 17:40
    #39484803
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
coborhcБрутфорс в данном случае не применим.Ну тогда с уверенностью можно обойтись одной цифрой для пин-кода. Тоже ведь не стопроцентная вероятность получить доступ за три попытки.
...
Рейтинг: 0 / 0
08.07.2017, 10:00
    #39485006
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
env,
2! попытки всего, затем карта блокируется.
какие там варианты отсекать? вот если ПИН "простой", то его проще и без видеоряда и подсмотреть и запомнить.

AmKad
про смену по телефону не знаю, но почти уверен, что после нескольких неудачных попыток, по крайней мере этот сервис должен блокироваться.
...
Рейтинг: 0 / 0
10.07.2017, 12:31
    #39485668
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
coborhcenv,
2! попытки всего, затем карта блокируется.
какие там варианты отсекать? вот если ПИН "простой", то его проще и без видеоряда и подсмотреть и запомнить.

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

....
stax
...
Рейтинг: 0 / 0
10.07.2017, 17:47
    #39485983
Glays
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
andrey_anonymoussqr_khvAmKad, спасибо! В понедельник потестирую её. Это намного лучше, чем предлагают выше.
Не намного.
Держать табличку < 10000 коротких строк - вообще никаких проблем, а по управляемости (правилам) - сплошной профит.
Заодно наглядно (путем count(*)) увидите, насколько сократили перебор потенциальному злоумышленнику.
Ещё легко можно включить в такой справочник год рождения/выпуска/закрытия/текущий, последние четыре цифры номера телефона и номер планеты в Тентуре.
...
Рейтинг: 0 / 0
10.07.2017, 17:59
    #39485991
coborhc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
-2-,

нет, лучше сделать пин из 100+ знаков, что б уж наверняка не подобрали :)
...
Рейтинг: 0 / 0
11.07.2017, 10:06
    #39486293
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация случайного числа
coborhc-2-,

нет, лучше сделать пин из 100+ знаков, что б уж наверняка не подобрали :)
ужесточили требование к паролям, в результате 90% записывают и "под клаву"

.....
stax
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Генерация случайного числа / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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