oracle中用存储过程加密一段字符串有哪些方法?需要有相应的C++或其他语言解密代码的

antimicro 2007-03-26 03:01:35
我想用存储过程加密一段字符串,然后在使用的地方解密。
...全文
218 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqi162 2007-03-26
  • 打赏
  • 举报
回复
没错
antimicro 2007-03-26
  • 打赏
  • 举报
回复
这个加密之后,是使用 3des算法解密么? 知道rawkey 就行了吧?
hongqi162 2007-03-26
  • 打赏
  • 举报
回复
create or replace package PG_ENCRYPT_DECRYPT
is
iKey varchar2(8):='oracle9i';
function GEN_RAW_KEY ( iKey in varchar2) return raw;
function DECRYPT_3KEY_MODE(iValue in raw,iMode in pls_integer)return varchar2;
function ENCRYPT_3KEY_MODE(iValue in varchar2,iMode in pls_integer)return raw;
function FormatStr(iValue in varchar2)return varchar2;
function FormatStr2(iValue in varchar2)return varchar2;
end;
/////////
create or replace package body PG_ENCRYPT_DECRYPT
is
function GEN_RAW_KEY ( iKey in varchar2)
return raw
as
rawkey raw(240) := '';
begin
for i in 1..length(iKey) loop
rawkey := rawkey||hextoraw(to_char(ascii(substr(iKey, i, 1))));
end loop;
return rawkey;
end GEN_RAW_KEY;
/* Creating function DECRYPT_3KEY_MODE*/
FUNCTION DECRYPT_3KEY_MODE ( iValue in raw, iMode in pls_integer)return varchar2
as
vDecrypted varchar2(4000);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);-- decrypt input string
vDecrypted := dbms_obfuscation_toolkit.des3decrypt (UTL_RAW.CAST_TO_VARCHAR2(iValue), key_string => rawkey, which => iMode);
return FormatStr2(vDecrypted);
end DECRYPT_3KEY_MODE;
/*Creating function ENCRYPT_3KEY_MODE*/
FUNCTION ENCRYPT_3KEY_MODE ( iValue in varchar2, iMode in pls_integer)return raw
as
vEncrypted varchar2(4000);
vEncryptedRaw Raw(2048);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);-- encrypt input string
vEncrypted := dbms_obfuscation_toolkit.des3encrypt (FormatStr(iValue), key_string => rawkey, which => iMode);
-- convert to raw as out
vEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted);
return vEncryptedRaw;
end ENCRYPT_3KEY_MODE;

function FormatStr(iValue in varchar2)return varchar2
as
begin
declare
i number;
j number;
m_value varchar2(4000);
begin
m_value:=iValue;
i:=(length(m_value) mod 8);
if i<>0 then
j:=1;
for j in 1..(8-i) loop
m_value:=m_value||'#';
end loop;
end if;
return m_value;
end;
end FormatStr;

function FormatStr2(iValue in varchar2)return varchar2
as
begin
declare
i number;
j number;
m_value varchar2(4000);
begin
m_value:=iValue;
i:=instr(iValue,'#',1,1);
if i>0 then
m_value:=substr(m_value,1,i-1);
end if;
return m_value;
end;
end FormatStr2;
end PG_ENCRYPT_DECRYPT;
////////////
create table users1(
userid varchar2(50)
primary key,
password varchar2(4000), --密码原文
encrypted varchar2(4000) --加密后的密码
);


insert into users1 values ('user1','user1234yyyy',null);
insert into users1 values ('user2','abcd1234yy',null);
insert into users1 values ('user3','oracle12yyy',null);


update users1 set encrypted = PG_ENCRYPT_DECRYPT.ENCRYPT_3KEY_MODE(password,1);--加密
select * from users1;--正常查看
select userid,password,PG_ENCRYPT_DECRYPT.DECRYPT_3KEY_MODE(encrypted,1) DECRYPTED from users1;--解密后查看

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧