Авторизация в 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