




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle wrap 与 unwrap( 加密与解密) 说明一. Wrap 说明官网的说明如下:APL/SQL Source Text Wrapping/docs/cd/E11882_01/appdev.112/e17126/wrap.htm#LNPLS1744You can wrap the PL/SQL source text for any of thesestored PL/SQL units, therebypreventing anyone from displaying or editing that text: (1)Package specification (2)Package body (3)Type specification (4)Type body (5)Function (6)Procedure A file containing wrapped PL/SQL source text is called awrapped file. Awrapped file can be moved, backed up, or processed by SQL*Plus or the Importand Export utilities. To produce a wrapped file, use either the PL/SQL Wrapper utility or aDBMS_DDLsubprogram.The PL/SQL Wrapper utility wraps the source text of every wrappable PL/SQL unitcreated by a specified SQL file. TheDBMS_DDLsubprograms wrap thesource text of single dynamically generated wrappable PL/SQL units. Both the PL/SQL Wrapper utility andDBMS_DDLsubprograms detecttokenization errors (for example, runaway strings), but not syntax or semanticerrors (for example, nonexistent tables or views). Wrapped files are upward-compatible between Oracle Database releases. For example, youcan load files produced by the V8.1.5 PL/SQL Wrapper utility into a V8.1.6 OracleDatabase.itpub上有篇文章提到了wrap 加密的原理: From:/12932950/viewspace-619808 Oracle加密的原理就是先对源码进行lz压缩lzstr,然后对压缩数据进行SHA-1运算得到40位的加密串shstr,然后将加密串与压缩串拼接得到shstr+lzstr,然后对拼接后的字符串进行Oracle双字符转换(转换表)。最后将转换后的字符串进行base64编码,最终得到wrap的加密串。 The default file extension forinput_fileissql. The default nameofoutput_fileisinput_file.plb. Therefore, these commands are equivalent: wrapiname=/mydir/myfile wrapiname=/mydir/myfile.sql oname=/mydir/myfile.plbThisexample specifies a different file extension forinput_fileand adifferent name foroutput_file: wrapiname=/mydir/myfile.src oname=/yourdir/yourfile.outwrap 的使用步骤如下:(1)将我们要加密的sql 语句保存到一个sql文本里。(2)用wrap 进行处理,指定输入的sql,即我们第一步的问题,然后指定输出的路径与文件名,默认扩展名是plb。(3)执行我们第二部进过wrap 处理的sql,即plb文件,创建我们的对象.示例1:wrap funcation-函数CREATE OR REPLACE FUNCTION F_DAVE ( n int) RETURN stringISBEGIN IF n = 1 THEN RETURN Dave is DBA!; ELSIF n = 2 THEN RETURN Dave come from AnQing!; ELSE RETURN Dave come from HuaiNing!; END IF;END;/SYSdave2(db2) select F_DAVE(4) fromdual;F_DAVE(4)-Dave come from HuaiNing!BTW: 今天群里有人问我的blog的例子里为啥有安庆,因为我是安庆怀宁人。oracledb2 $ pwd/home/oracleoracledb2 $cat dave.sqlCREATE OR REPLACE FUNCTION F_DAVE ( n int) RETURNstringISBEGIN IF n = 1 THEN RETURN Dave is DBA!; ELSIF n = 2 THEN RETURN Dave come from AnQing!; ELSE RETURN Dave come from HuaiNing!; END IF;END;/oracledb2 $wrap iname=dave.sqlPL/SQL Wrapper: Release .0-Production on Thu Aug 18 22:59:14 2011Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing dave.sql to dave.plboracledb2 $ lsbifile.bbddave.plb dave.sql Desktoplog.bbdoracledb2 $cat dave.plbCREATE OR REPLACE FUNCTION F_DAVE wrappeda0000001abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd810d e7S9NWrpt8q6tkKEMxCcfYJz2aLF4wgxDQLZ4VfC9AkE6OnV4ydypXGhveHcDg8UXy98WIg6xRcrtc/BRdQJjutbna/9+g0LlaSx87/znV+y926S1AeC0IRi/tjPJTyvJereDdk8mftMo8QMjVfw0xXn0zVagAawwNVhSAiy/JPTMKkrBkC5ruMwQSTe6JQNq7Q2QtJV0hgQou0rYuet4/gJ5BwAj75ph6EA=/SYSdave2(db2) dave.plb-再次调用函数,正常使用:SYSdave2(db2) select F_DAVE(4) fromdual;F_DAVE(4)-Dave come from HuaiNing!-查看函数源码,已经加过密了:SYSdave2(db2) select text fromdba_source where name=F_DAVE;TEXT-FUNCTION F_DAVE wrappeda0000001abcdabcdabcdabcdabcdabcdabcdabcdTEXT-abcdabcdabcdabcdabcdabcdabcd810d e7S9NWrpt8q6tkKEMxCcfYJz2aLF4wgxDQLZ4VfC9AkE6OnV4ydypXGhveHcDg8UXy98WIg6xRcrtc/BRdQJjutbna/9+g0LlaSx87/znV+y926S1AeC0IRi/tjPJTyvJereDdk8mftMo8QMjVTEXT-fw0xXn0zVagAawwNVhSAiy/JPTMKkrBkC5ruMwQSTe6JQNq7Q2QtJV0hgQou0rYuet4/gJ5BwAj75ph6EA=示例2:SYS.DBMS_DDL 函数 thedbms_ddlpackage provideswrapfunctionsandcreate_wrappedprocedures, each of whichwraps the pl/sql source text of a single dynamically generated wrappable pl/sqlunit. TheDBMS_DDLpackagealso provides the exceptionMALFORMED_WRAP_INPUT(ORA-24230),which is raised if the input toWRAPorCREATE_WRAPPEDisnot a valid wrappable PL/SQL unit. (For the list of wrappable PL/SQL units, seethe introduction toPL/SQLSource Text Wrapping.) EachWRAPfunctiontakes as input a singleCREATEstatement that creates a wrappablePL/SQL unit and returns an equivalentCREATEstatement in which thePL/SQL source text is wrapped. For more information about theWRAPfunctions,seeOracleDatabase PL/SQL Packages and Types Reference. EachCREATE_WRAPPEDproceduredoes what its correspondingWRAPfunction does and then runs thereturnedCREATEstatement, creating the specified PL/SQL unit. Formore information about theCREATE_WRAPPEDprocedures。该示例直接参考官方文档:DECLAREpackage_text VARCHAR2(32767); -text for creating package spec and bodyFUNCTION generate_spec (pkgname VARCHAR2) RETURN VARCHAR2 ASBEGINRETURN CREATE PACKAGE | pkgname | AUTHID DEFINER ASPROCEDURE raise_salary (emp_id NUMBER, amount NUMBER);PROCEDURE fire_employee (emp_id NUMBER);END | pkgname | ; ENDgenerate_spec;FUNCTION generate_body (pkgname VARCHAR2) RETURN VARCHAR2 ASBEGIN RETURNCREATE PACKAGE BODY | pkgname | ASPROCEDURE raise_salary (emp_id NUMBER, amount NUMBER) ISBEGINUPDATE employeesSET salary = salary + amount WHERE employee_id = emp_id;END raise_salary;PROCEDURE fire_employee (emp_id NUMBER) ISBEGINDELETE FROM employees WHERE employee_id = emp_id;END fire_employee;END | pkgname | ; ENDgenerate_body;BEGINpackage_text := generate_spec(emp_actions); - Generate package specEXECUTE IMMEDIATE package_text; - Create package specpackage_text := generate_body(emp_actions); - Generate package body SYS.DBMS_DDL.CREATE_WRAPPED(package_text); - Create wrapped package bodyEND;/二. Unwrap 说明 wrap的目的是为了加密,所以Oracle并没有提供unwrap 的方法。 itpub上的一些牛人研究了一下这个问题,写了一些unwrap的代码。 具体讨论的过程,参考itpub的2个帖子: /thread-1154232-1-2.html /viewthread.php?tid=1175718&extra=page%3D1&frombbs=1我这里贴一下unwrap 的代码:/* Formatted on2011/8/18 12:59:54 (QP5 v5.163.1008.3004) */CREATE OR REPLACE PACKAGE amosunwrapperIS FUNCTION deflate (src IN VARCHAR2) RETURN RAW; FUNCTION deflate (src IN VARCHAR2, quality IN NUMBER) RETURN RAW; FUNCTION inflate (src IN RAW) RETURN VARCHAR2;END;/CREATE OR REPLACE PACKAGE BODY amosunwrapperIS FUNCTION deflate (src IN VARCHAR2) RETURN RAW IS BEGIN RETURN deflate (src, 6); END; FUNCTION deflate (src IN VARCHAR2, quality IN NUMBER) RETURN RAW AS LANGUAGE JAVA NAME UNWRAPPER.Deflate( java.lang.String, int ) returnbyte; FUNCTION inflate (src IN RAW) RETURN VARCHAR2 AS LANGUAGE JAVA NAME UNWRAPPER.Inflate( byte ) returnjava.lang.String;END;/* Formatted on2011/8/18 13:00:16 (QP5 v5.163.1008.3004) */CREATE OR REPLACE JAVA SOURCE NAMED UNWRAPPER ASimportjava.io.*;importjava.util.zip.*;public classUNWRAPPERpublic staticString Inflate( bytesrc)try ByteArrayInputStream bis= newByteArrayInputStream(src); InflaterInputStream iis= newInflaterInputStream(bis); StringBuffer sb= newStringBuffer();for( intc=iis.read();c!= -1;c=iis.read() ) sb.append( (char)c);returnsb.toString(); catch (Exception e)return null;public static byteDeflate(String src, intquality)trybytetmp= newbytesrc.length() + 100 ; Deflater defl= newDeflater(quality); defl.setInput(src.getBytes(UTF-8) ); defl.finish();intcnt=defl.deflate(tmp);byteres= newbytecnt;for( inti= 0;icnt;i+ ) res=tmp;returnres; catch (Exception e)return null;/ALTER JAVA SOURCE UNWRAPPER COMPILE/* Formatted on2011/8/18 13:02:57 (QP5 v5.163.1008.3004) */-为了输出中文,要修改java过程CREATE OR REPLACE JAVA SOURCE NAMED UNWRAPPER ASimportjava.io.*;importjava.util.zip.*;public classUNWRAPPERpublic staticString Inflate( bytesrc)try ByteArrayInputStream bis= newByteArrayInputStream(src); InflaterInputStream iis= newInflaterInputStream(bis); StringBuffer sb= newStringBuffer();for( intc=iis.read();c!= -1;c=iis.read() ) sb.append( (char)c);String hello= newString(sb.toString().getBytes(iso8859-1),GBK);returnhello; catch (Exception e)return nu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物流行业调度员招聘模拟题集及答案
- 2025年建筑工程师考试冲刺题库及答案
- 【教案版】小学五班级下册 跳绳2
- 2025年人力资源管理师考试专业技能部分模拟题及答案
- 2025年营养师专业资格认证备考手册模拟题及答案全收录
- 2025年物资保管与盘点技能考核试题集
- 2025年法律行业律师招聘面试技巧及预测题集
- 2025年法律顾问面试指南与模拟题详解
- 2025年物资储备仓库IT招聘面试题预测与准备策略
- 2025年烈士纪念场所工作面试技巧与模拟题解答
- 宠物旅游创业计划书
- 图表作文写作技巧与范文解析
- 中西翻译简史-研究的考试课题
- 静脉导管的维护
- 设备监理表格使用说明
- 文化创意公司章程范本
- 代谢性脑病的护理诊断与措施
- 五年级阅读理解(通用15篇)
- 2023-2024学年部编版七年级上册生物第三单元教案生物圈中的绿色植物生物学与文学 寄予植物的情怀
- 院内感染预防控制
- Unit 11 Lesson 1 课件-2023-2024学年高中英语北师大版(2019)选择性必修第四册
评论
0/150
提交评论