Заполнение словаря паролей

                   

                    Для генерации сочетаний символов для использования в качестве паролей может быть использована следующая процедура:

 

CREATE TABLE GENERAL
(
PASS VARCHAR2(30)
)
tablespace USERS
pctfree 0
pctused 99
initrans 1
maxtrans 255
storage
(
initial 24K
next 1040K
minextents 1
maxextents unlimited
pctincrease 0
);
/


CREATE OR REPLACE PROCEDURE "MAKER_DICT"

                       (na number,                                          -- количество знаков в пароле
                        p_start_t number default 1,                  -- начальное значение для генерации
                        p_stop_t number default 2400000000 -- конечное значение для генерации
                       )
is
--********************************************************
-- генерация значений пароля до 7 знаков включительно

-- автор safeguardian@yandex.ru
--********************************************************
g_letters varchar2(26) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
g_numbers varchar2(14) := '0123456789#$_@';
ma number := 0;
pw1 varchar2(7) := '';
pw2 varchar2(7) := '';
pw3 varchar2(7) := '';
pw4 varchar2(7) := '';
pw5 varchar2(7) := '';
pw6 varchar2(7) := '';
pw7 varchar2(7) := '';
res number :=0;
err number :=0;
cnt number :=0;
end_make number :=0;
start_t number := p_start_t;
stop_t number := p_stop_t;

             FUNCTION fix_pass

                                   (siz IN number) return varchar2
             as
             begin
             return substr(g_letters||g_numbers,siz,1);
             end fix_pass;


            PROCEDURE comm

                                   (ins varchar2)
            is
            BEGIN
            if start_t >= p_start_t and start_t <= stop_t then
                begin
                start_t := start_t + 1;
                cnt := cnt + 1;
                insert /*+ append*/ into general values (ins);
                if cnt = 100000 then

                    commit;
                    cnt := 0;
                end if;
                res:=res+1;
                exception
                    when others then
                    commit;
                    err:= err + 1;
                    cnt := 0;
                end;
            end if;
            END COMM;

begin
if p_start_t > p_stop_t or
   p_stop_t > 2400000000 or
   p_start_t < 1 or
   p_stop_t < 1
then
        dbms_output.put_line('Неверный диапазон значений');
        return;
end if;

end_make := length(g_letters||g_numbers);

ma := round(na);
if ma > 7 then ma := 7; end if;
if ma < 1 then ma := 1; end if;

for a in 1..end_make loop -- 1
pw1 := fix_pass(a);
if ma > 1 then for b in 1..end_make loop --2
            pw2 := pw1||fix_pass(b);
            if ma > 2 then for c in 1..end_make loop --3
                        pw3 := pw2||fix_pass(c);
                        if ma > 3 then for d in 1..end_make loop --4
                                    pw4 := pw3||fix_pass(d);
                                    if ma > 4 then for e in 1..end_make loop -- 5
                                                pw5 := pw4||fix_pass(e);
                                                if ma > 5 then for f in 1..end_make loop --6
                                                            pw6 := pw5||fix_pass(f);
                                                            if ma > 6 then for g in 1..end_make loop -- 7
                                                                        pw7 := pw6||fix_pass(g); comm(pw7);
                                                            exit when start_t > stop_t;
                                                            end loop; else comm(pw6); end if; -- 7
                                                exit when start_t > stop_t;
                                                end loop; else comm(pw5); end if; -- 6
                                    exit when start_t > stop_t;
                                    end loop; else comm(pw4); end if; -- 5
                        exit when start_t > stop_t;
                        end loop; else comm(pw3); end if; -- 4
            exit when start_t > stop_t;
            end loop; else comm(pw2); end if; -- 3
exit when start_t > stop_t;
end loop; else comm(pw1); end if; -- 2
exit when start_t > stop_t;
end loop; -- 1

dbms_output.put_line('Генерация для '||ma||' знаков. Зафиксировано '||res||' знаков, ошибок - '||err);
commit;
 

end MAKER_DICT;
/

Сайт создан в системе uCoz