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

前端之家收集整理的这篇文章主要介绍了使用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对象代码的加解密过程就这么完成了~~~~~

原文链接:https://www.f2er.com/oracle/213577.html

猜你在找的Oracle相关文章