| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Re: Encryption function
Here is a PL/SQL function that you can use:
create or replace function encrypt (name_in char, password char) return char as
l_name varchar2(30); l_password varchar2(30); l_root number; l_offset number; l_shift number; l_answer varchar2(30); l_char varchar2(1); l_position number;
begin
if length(name_in) < 3 or
length(password) < 3 then
return '-1';
if length(name_in) > 30 or
length(password) > 30 then
return '-2';
l_name := upper(name_in);
l_password := upper(password);
for i in 1..length(l_name) loop
l_shift := ascii(substr(l_name, i, 1));
if l_shift < 65 or
l_shift > 90 then
l_shift := 65 + mod(l_shift, 24);
l_name := substr(l_name, 1, i-1) ||
chr(l_shift) ||
substr(l_name, i+1);
end if;
end loop;
for i in 1..length(l_password) loop
l_shift := ascii(substr(l_password, i, 1));
if l_shift < 65 or
l_shift > 90 then
l_shift := 65 + mod(l_shift, 24);
l_password := substr(l_password, 1, i-1) ||
chr(l_shift) ||
substr(l_password, i+1);
end if;
l_offset := ascii(substr(l_name, 2, 1)); l_root := ascii(substr(l_password, length(l_password))); l_shift := ascii(substr(l_name, length(l_name))); l_shift := mod(l_shift, 13); l_answer := l_name || l_password; ----------------------
l_position := 1;
for i in 1..30 loop
if length(l_answer) >= 30 then
exit;
end if;
l_shift := l_shift + l_offset + i;
if l_shift > 90 then
l_shift := mod(l_shift, 24);
l_shift := l_shift + 65;
end if;
l_char := chr(l_shift);
-- alternately place stuffing characters on
-- either end of password
if l_position = 1 then
l_answer := l_answer || l_char;
l_position := 0;
else
l_answer := l_char || l_answer;
l_position := 1;
end if;
end loop;
for i in 1..30 loop
l_shift := ascii(substr(l_answer, i, 1));
l_shift := l_shift + l_root + i;
if l_shift > 90 then
l_shift := mod(l_shift, 24);
l_shift := l_shift + 65;
end if;
l_answer := substr(l_answer, 1, i-1) ||
chr(l_shift) ||
substr(l_answer, i+1);
end loop;
return l_answer;
end;
/
Received on Wed Jan 27 1999 - 18:38:50 CST
![]() |
![]() |