Hi! everybody,
I see an encryption function in my database.
select f_pwd_encrypt('password') from dual
-->12412913141313139139130121
My question is
How to write a decryption function?
Like:
select f_pwd_decrypt('12412913141313139139130121') from dual
-->password
CREATE OR REPLACE FUNCTION EPADM."F_PWD_ENCRYPT" ( vpwd in varchar2)
return varchar2
is
vother_p varchar2(9);
vtr_pwd varchar2(2048);
i number;
j number;
vsubstr varchar2(9);
vtemp1 varchar2(08);
vvalue number := 0;
vdb_pwd varchar2(100);
function str_2_bit(vstring in varchar2)
return varchar2
is
i number;
vtemp number;
v1 varchar(2048);
function single_byte(vin in number)
return varchar2
is
i number;
vresult varchar2(08);
vtemp number := vin;
begin
for i in 1..8 loop
vresult := to_char(mod(vtemp,2))||vresult;
vtemp := trunc(vtemp/2);
end loop;
return(vresult);
end;
--
begin
for i in 1..lengthb(vstring) loop
select to_number(substrb(dump( vstring ,10,i,1),instr(dump( vstring ,10,i,1),' ',-1)+1))
into vtemp
from dual;
v1 := v1 || single_byte(vtemp);
end loop;
return(v1);
end;
begin
vtr_pwd := str_2_bit(vpwd);
vtr_pwd := substrb(vtr_pwd,4)||substrb(vtr_pwd,1,3);
vvalue := 0;
vdb_pwd := null;
for i in 1..(lengthb(vtr_pwd)/4) loop
vtemp1 := substrb(vtr_pwd,(i-1)*4+1,4);
for j in 1..4 loop
vvalue := vvalue + to_number(substrb(vtemp1,j,1)) * power(2,j-1);
dbms_output.put_line(j||' '||vvalue);
end loop;
vdb_pwd := to_char(vvalue) ||vdb_pwd;
vvalue := 0;
end loop;
return(vdb_pwd);
END;
/