背景:我想对我编写的加密解密用wrap进行代码包装加密。1、我创建的一个包,里面有密钥和加密解码的方法,由于要保护密钥不被人偷窃,所以我对这个程序进行wrap加密
2、将我上面创建的PL/SQL程序保存为source.sql,放在E盘下。
3、打开Dos命令,对source.sql进行加密
E:\>wrap iname=source.sql oname=p_encrypt_decrypt.sqlPL/SQL Wrapper: Release 10.2.0.1.0- 64bit Production on 星期五 1月 29 10:24:40 2010Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing source.sql to p_encrypt_decrypt.sql4、Dos命令下运行p_encrypt_decrypt.sql,即可见包为密文了
5、然后PL/SQL developer 下运行p_encrypt_decrypt.sqlSQL> @e:\p_encrypt_decrypt.sql;Package createdWarning: Package body created with compilation errorsSQL> set serveroutput on ;
SQL> show error
Errors for PACKAGE BODY SYS.P_ENCRYPT_DECRYPT:LINE/COL ERROR
-------- ---------------------------------------------------------------------------------------------
29/8 PLS-00114: 标识符 'SOZFVSJOJTKQIU25X3JYSVCUY3W6RW' 太长
29/2 PLS-00103: 出现符号 "W"
29/56 PLS-00103: 出现符号 "="在需要下列之一时: . ( , * @ % & - + / at mod remainder rem <an identifier> <a double-quoted delimited-identifier> <an exponent (**)> as from into || bulk
6、最后打开p_encrypt_decrypt包,即会显示/* Source is wrapped */
但是包有错误
7、我直接包我写的加密解密程序放在PL/SQL developer下运行,不会报错!
针对上面的加密错误,我不花了一个小时,没有解决思路,麻烦大虾指点下!谢谢!
2、将我上面创建的PL/SQL程序保存为source.sql,放在E盘下。
3、打开Dos命令,对source.sql进行加密
E:\>wrap iname=source.sql oname=p_encrypt_decrypt.sqlPL/SQL Wrapper: Release 10.2.0.1.0- 64bit Production on 星期五 1月 29 10:24:40 2010Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing source.sql to p_encrypt_decrypt.sql4、Dos命令下运行p_encrypt_decrypt.sql,即可见包为密文了
5、然后PL/SQL developer 下运行p_encrypt_decrypt.sqlSQL> @e:\p_encrypt_decrypt.sql;Package createdWarning: Package body created with compilation errorsSQL> set serveroutput on ;
SQL> show error
Errors for PACKAGE BODY SYS.P_ENCRYPT_DECRYPT:LINE/COL ERROR
-------- ---------------------------------------------------------------------------------------------
29/8 PLS-00114: 标识符 'SOZFVSJOJTKQIU25X3JYSVCUY3W6RW' 太长
29/2 PLS-00103: 出现符号 "W"
29/56 PLS-00103: 出现符号 "="在需要下列之一时: . ( , * @ % & - + / at mod remainder rem <an identifier> <a double-quoted delimited-identifier> <an exponent (**)> as from into || bulk
6、最后打开p_encrypt_decrypt包,即会显示/* Source is wrapped */
但是包有错误
7、我直接包我写的加密解密程序放在PL/SQL developer下运行,不会报错!
针对上面的加密错误,我不花了一个小时,没有解决思路,麻烦大虾指点下!谢谢!
解决方案 »
- pro*c中怎么正确定c变量来保存blob数据
- oracle 如何查看单位时间的commit次数
- 在游标中,如何取出第一条数据?
- 关于Oracle 触发器的问题
- 请问此约束能否实现
- 视图中有数据,但用Enterprise Manager Console或SQL Plus查看都为空,可能是什么原因?在线等!THANKS!!!
- oracle9i里的xdb如何更改8080端口。
- 模拟数据文件丢失时的处理。
- 急求助!substr在group中使用的问题??
- 有关ORACLE的PL/SQL问题,100分,在线等.............
- 请问一下package怎样备份和恢复
- ORA-01000 游标打开数超过最大值
若无错误,则创建后再wrap加密该包。
source.sql内容:create or replace package p_encrypt_decrypt
is
ikey varchar2(8):='paddy123';
function gen_raw_key(ikey in varchar2) return raw;
function decrypt_3key_mode(ivalue in raw,imode in pls_integer) return number;
function encrypt_3key_mode(ivalue in varchar2,imode in pls_integer) return raw;
end;
/
create or replace package body p_encrypt_decrypt
is function gen_raw_key(ikey in varchar2)
return raw
as
rawkey raw(720):='';
begin
for i in 1..length(ikey) loop
rawkey:=rawkey||hextoraw(to_char(ascii(substr(ikey,i,1))));
end loop;
return rawkey;
end;
function decrypt_3key_mode(ivalue in raw,imode in pls_integer)
return number
as
v_decryptedraw varchar2(4000);
v_decrypted number(20,5);
rawkey raw(720):='';
begin
rawkey:=gen_raw_key(ikey);
v_decryptedraw:=dbms_obfuscation_toolkit.des3decrypt(utl_raw.cast_to_varchar2(ivalue),
key_string=>rawkey,which=>imode);
v_decrypted:=to_number(trim(v_decryptedraw));
return v_decrypted;
end; function encrypt_3key_mode(ivalue in varchar2,imode in pls_integer)
return raw
is
v_encrypted varchar2(4000);
v_encryptedraw raw(2048);
rawkey raw(720):='';
v_Tmp varchar2(32):=rpad(ivalue,32,' ');
begin
rawkey:=gen_raw_key(ikey);
v_encrypted:=dbms_obfuscation_toolkit.des3encrypt(v_Tmp,key_string=>rawkey,which=>imode);
v_encryptedraw:=utl_raw.cast_to_raw(v_encrypted);
return v_encryptedraw;
end;
end;
/
是否是加密后的标识符太长也会出错,
楼主可尝试把函数、过程、包名、变更名所涉及的标识符命名短一些
虽然不会报标识符长度的错误,但是还是会报后面两条错误!
即:29/2 PLS-00103: 出现符号 "AJ2UKCXFT"
29/56 PLS-00103: 出现符号 "="在需要下列之一时: . ( , * @ % & - + / at mod remainder rem <an identifier> <a double-quoted delimited-identifier> <an exponent (**)> as from into || bulk
问题剩下最后一个错误了SQL> @e:\p_encrypt_decrypt.sqlWarning: Package created with compilation errorsSQL> show error
Errors for PACKAGE ERP.P_ENCRYPT_DECRYPT:LINE/COL ERROR
-------- ----------------------------
9/1 PLS-00103: 出现符号 "CREATE"SQL>
没有错误。
SQL> host wrap iname=d:\source.sql oname=d:\p_encrypt_decrypt.sqlPL/SQL Wrapper: Release 10.2.0.1.0- Production on 星期五 1月 29 12:53:31 2010Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing d:\source.sql to d:\p_encrypt_decrypt.sqlSQL> @d:\p_encrypt_decrypt.sql程序包体已创建。SQL> show error
没有错误。
SQL>
我把你source.sql内容完整保存下来,又测试了一遍,依然没问题!SQL> @d:\source.sql程序包已创建。
程序包体已创建。SQL> show error
没有错误。
SQL> host wrap iname=d:\source.sql oname=d:\p_encrypt_decrypt.sqlPL/SQL Wrapper: Release 10.2.0.1.0- Production on 星期五 1月 29 13:00:07 2010Copyright (c) 1993, 2004, Oracle. All rights reserved.Processing d:\source.sql to d:\p_encrypt_decrypt.sqlSQL> @d:\p_encrypt_decrypt.sql程序包已创建。
程序包体已创建。SQL> show error
没有错误。
SQL>
难道?莫灰?或许……传说中的,RPWT。开个小玩,勿怒。你再仔细检查原source.sql里是否有隐藏的特殊字符,然后把运行@source.sql的详细错误贴出来。我就不信邪了!
SQL> @e:\source.sql;Package createdPackage body created
SQL> host wrap iname=e:\source.sql oname=e:\p_encrypt_decrypt.sql
SQL> @e:\p_encrypt_decrypt.sql;Package createdWarning: Package body created with compilation errorsSQL> show error
Errors for PACKAGE BODY ERP.P_ENCRYPT_DECRYPT:LINE/COL ERROR
-------- -----------------------------------------------------------------------
29/8 PLS-00114: 标识符 'SOZFVSJOJTKQIU25X3JYSVCUY3W6RW' 太长
29/2 PLS-00103: 出现符号 "W"
29/56 PLS-00103: 出现符号 "="在需要下列之一时: . ( , * @ % & - + / at mod remainder rem <an identifier> <a double-quoted delimited-identifier> <an exponent (**)> as from into || bulk
你用记事本什么的,打开仔细看看,哪怕有些空白,也可能是不正确的。我曾经不止一次遇到过这样的情况。
试试 在 end 后面加上包的名字。。end p_encrypt_decrypt;
可就是执行的时候报那个错误SQL> @e:\p_encrypt_decrypt.sql;Warning: Package created with compilation errorsWarning: Package body created with compilation errorsSQL> show error
Errors for PACKAGE BODY ERP.P_ENCRYPT_DECRYPT:LINE/COL ERROR
-------- ------------------------
29/4 PLS-00114: 标识符 'XUN2ZNZN4B86NHHSXQ0SVKX91XOZUJ' 太长
29/2 PLS-00103: 出现符号 "C"
33/0 PLS-00103: 出现符号 "end-of-file"在需要下列之一时: . ( , * @ % & - + / at mod remainder rem <an identifier> <a double-quoted delimited-identifier> <an exponent (**)> as from into || bulk SQL>
如果在pl/sql developer中打开cmd窗口执行就有这个错误!
这是什么原因呢。。
我也出现这种情况