Авторизация в Django c помощью DBMS_OBFUSCATION_TOOLKIT

Есть ли возможность сделать авторизацию в Django с помощью DBMS_OBFUSCATION_TOOLKIT? Может кто сталкивался с подобной задачей...


Ответы (1 шт):

Автор решения: 0xdb

Пакет DBMS_OBFUSCATION_TOOLKIT устарел и в новых версиях больше недоступен.

Если надо сохранять учетные данные пользователей, следует воспользоваться новым пакетом DBMS_CRYPTO.

Воспроизводимый ример для реализации с сохранением SH256 (256 бит) хэша:

create table users (name varchar2 (32) primary key, hash raw (32))
/
create or replace package appUserSec as
    function getHash (name varchar2, pass varchar2) return raw;
    function checkUser (name varchar2, pass varchar2) return varchar2;
end;
/
create or replace package body appUserSec as
    function getHash (name  varchar2, pass varchar2) return raw as
        pragma udf;
        salt constant varchar2(30) := 'putyoursalthere';
    begin
        return dbms_crypto.hash (
            utl_i18n.string_to_raw (name||salt||pass, 'AL32UTF8'), 
            dbms_crypto.hash_sh256);
    end;
    function checkUser (name varchar2, pass varchar2) return varchar2 is
        pragma udf;
        hash raw (32);
    begin
        select hash into hash
        from users
        where name = checkUser.name;
        if hash = getHash (name, pass) then 
            return ('Valid');
        else 
            return ('Invalid username/password');
        end if;    
    exception when no_data_found then
        return ('Unknown username');
    end;
end;
/

Пример использования:

insert into users values ('ВасяПупкин', appUserSec.getHash ('ВасяПупкин', 'неУгадаете'));

with u (name, pass) as (
    select 'ВасяПупкин', 'неУгадаете' from dual union all
    select 'ВасяПупкин', 'Я забыл'    from dual union all
    select 'ЯнеПупкин',  'неУгадаете' from dual
)
select u.*, appUserSec.checkUser (name, pass) checked from u;

NAME                 PASS                 CHECKED                         
-------------------- -------------------- --------------------------------
ВасяПупкин           неУгадаете           Valid                           
ВасяПупкин           Я забыл              Invalid username/password       
ЯнеПупкин            неУгадаете           Unknown username                
→ Ссылка