使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函
使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码 Oracle数据库系统自带的PL/SQL对象(包,存储过程,函数等)的代码绝大部分都是使用了wrap程序加密的。为了程序代码的保密和业务规则的保密性,我们也可以将自己写的PL/SQL对象(包,存储过程,函数等)的代码进行加密。本人做了一个示例方法步骤如下: 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. 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 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 函数的源代码进行加密: 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 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" 按钮,即可进行解密,如下图:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |