Oracle Wrapped 解码工具,使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码...

使用wrap和unwrap加密解密Oracle的PL/sql对象(包,存储过程,函数等)代码

Oracle数据库系统自带的PL/sql对象(包,存储过程,函数等)的代码绝大部分都是使用了wrap程序加密的。为了程序代码的保密和业务规则的保密性,我们也可以将自己写的PL/sql对象(包,存储过程,函数等)的代码进行加密。本人做了一个示例方法步骤如下:

1、首先创建一个简单的加法计算,并返回计算结果的名为 f_test 的函数:

20:22:23 SYS@orcl*sql> create or replace functionf_test(x in number,y number)

20:22:37 2 return varchar2 is

20:22:37 3 v_result varchar2(200);

20:22:37 4 begin

20:22:37 5 v_result := 'Theresult:'||to_char(x)||' + '||y||' = '||to_char(x+y);

20:22:37 6 return v_result;

20:22:37 7 end f_test;

20:22:41 8 /

Function created.

2、测试 f_test 函数加密前的调用运行状态是正常的:

20:25:29 SYS@orcl*sql> var a number

20:25:34 SYS@orcl*sql> var b number

20:25:36 SYS@orcl*sql> var rs varchar2(100)

20:25:41 SYS@orcl*sql> exec :a:=8

PL/sql procedure successfully completed.

Elapsed: 00:00:00.00

20:25:47 SYS@orcl*sql> exec :b:=2

Elapsed: 00:00:00.01

20:25:52 SYS@orcl*sql> exec :rs:=f_test(:a,:b);

20:26:09 SYS@orcl*sql> print rs

RS

------------------------

The result:8 + 2 = 10

20:26:16 SYS@orcl*sql> select f_test(:a,:b) from dual;

F_TEST(:A,:B)

The result:8 + 2 = 10

3、 查看未加密的 f_test 函数的源代码:

20:26:27 SYS@orcl*sql> select text from dba_sourcewhere lower(name)='f_test';

TEXT

---------------------------------------------------------------------------------

function f_test(x in number,51); font-family:Arial; font-size:14px; line-height:26px"> return varchar2 is

v_result varchar2(200);

begin

v_result := 'The result:'||to_char(x)||' + '||y||'= '||to_char(x+y);

return v_result;

end f_test;

7 rows selected.

4、使用 wrap 程序对 f_test 函数的源代码进行加密:

4.1 将 f_test 函数的源代码保存到一个 f_test.sql 脚本文件中

4.2 执行 wrap 命令对 f_test 函数进行加密处理:

oracle@SLES11:~/tmp> wrapiname=f_test.sql

PL/sql Wrapper:Release 11.2.0.1.0- Production on Sat Jan 16 20:28:15 2016

Copyright (c)1993,2009,Oracle. All rights reserved.

Processing f_test.sql to f_test.plb

4.3 在正常运行的数据库的sql提示符下执行上述生成的 f_test.plb 加密文件:

20:26:54 SYS@orcl*sql>@/home/oracle/tmp/f_test.plb

5、查看加密后的 f_test 函数的源代码(已经加密成功了):

20:29:10 SYS@orcl*sql>select text from dba_source where lower(name)='f_test';

------------------------------------------------------------------------------------

function f_test wrapped

a000000

354

abcd

8

bf e3

a35ncMl6L/K4H+2JqJw5pFSB6LEwgy7wAJnWfARG2sHqaKfjpNvMUqXvYTczlOBmyZeRKVAm

g2IkvJ4rRQB6xlUNpyeMexVqlus04/MYZzOHoRCf2qJZDAsqOBYyEGIynj0Dr/YxBROtGlq3

FJeTbJYYBLhdk/tIQbYZ6+RCYogor/U/9uN/njfv1OVoYET5arQ79t27I0/ZWBo5O3jCDzrS

RLstIfA=

Elapsed: 00:00:00.19

6、验证加密后的 f_test 函数运行是否正常:

20:29:11 SYS@orcl*sql> selectf_test(1,7) from dual;

F_TEST(1,7)

-------------------------------------------------------

The result:1 + 7 = 8

到此,函数加密的过程已成功完成,接下来利用unwrap工具对加密了的 f_test 函数代码进行解密:

如果使用创建Java对象进行lz解压缩方式进行解密的过程进行解密将会很烦琐,所以使用现成的工具最为方便,据说这一个阿里巴巴员工写的解密工具,叫FyUnwrap。

1、这个工具需要连接到需要解密代码的数据库,先使用 lsnrctl start 命令启动数据库监听(不连接数据库也可以,复制加密的源代码到FyUnwrap 工具的 Wrapped Text 输入框,只不过连接数据库后操作方便一点,而且连接后,会列出数据库的所有对象列表,点击即可以进行解密)。

2、找到之前加密的 f_test 函数,然后点击 "Unwrap" 按钮,即可进行解密,如下图:

至此,PL/sql对象代码的加解密过程就这么完成了~~~~~

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值