Oracle wrap加密错误

gelyon 2010-01-29 10:58:14
背景:我想对我编写的加密解密用wrap进行代码包装加密。

1、我创建的一个包,里面有密钥和加密解码的方法,由于要保护密钥不被人偷窃,所以我对这个程序进行wrap加密
2、将我上面创建的PL/SQL程序保存为source.sql,放在E盘下。
3、打开Dos命令,对source.sql进行加密
E:\>wrap iname=source.sql oname=p_encrypt_decrypt.sql

PL/SQL Wrapper: Release 10.2.0.1.0- 64bit Production on 星期五 1月 29 10:24:40 2010

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

Processing source.sql to p_encrypt_decrypt.sql

4、Dos命令下运行p_encrypt_decrypt.sql,即可见包为密文了


5、然后PL/SQL developer 下运行p_encrypt_decrypt.sql

SQL> @e:\p_encrypt_decrypt.sql;

Package created

Warning: Package body created with compilation errors

SQL> 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下运行,不会报错!


针对上面的加密错误,我不花了一个小时,没有解决思路,麻烦大虾指点下!谢谢!
...全文
757 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinlang5252 2011-03-09
  • 打赏
  • 举报
回复
楼主的系统是什么系统? xp sp2还是xp sp3? win2003?
  • 打赏
  • 举报
回复
进入sqllus下执行就不会有问题。
这是什么原因呢。。
我也出现这种情况
sleepzzzzz 2010-03-05
  • 打赏
  • 举报
回复
楼上(18楼)正解。
lei_rong 2010-03-01
  • 打赏
  • 举报
回复
进入sqllus下执行就不会有问题。
如果在pl/sql developer中打开cmd窗口执行就有这个错误!
suiziguo 2010-01-29
  • 打赏
  • 举报
回复
SQL> @d:\source.sql

程序包体已创建。

SQL> show error
没有错误。
SQL> host wrap iname=d:\source.sql oname=d:\p_encrypt_decrypt.sql

PL/SQL Wrapper: Release 10.2.0.1.0- Production on 星期五 1月 29 12:53:31 2010

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

Processing d:\source.sql to d:\p_encrypt_decrypt.sql

SQL> @d:\p_encrypt_decrypt.sql

程序包体已创建。

SQL> show error
没有错误。
SQL>

gelyon 2010-01-29
  • 打赏
  • 举报
回复
我把source.sql中的“/”去掉
问题剩下最后一个错误了

SQL> @e:\p_encrypt_decrypt.sql

Warning: Package created with compilation errors

SQL> show error
Errors for PACKAGE ERP.P_ENCRYPT_DECRYPT:

LINE/COL ERROR
-------- ----------------------------
9/1 PLS-00103: 出现符号 "CREATE"

SQL>

gelyon 2010-01-29
  • 打赏
  • 举报
回复
我改变了标识符的长度
虽然不会报标识符长度的错误,但是还是会报后面两条错误!
即:

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



[Quote=引用 4 楼 tangren 的回复:]
从错误码来看,提示标识符太长,ORACLE标识符限制为最大30个字符
是否是加密后的标识符太长也会出错,
楼主可尝试把函数、过程、包名、变更名所涉及的标识符命名短一些
[/Quote]
tangren 2010-01-29
  • 打赏
  • 举报
回复
从错误码来看,提示标识符太长,ORACLE标识符限制为最大30个字符
是否是加密后的标识符太长也会出错,
楼主可尝试把函数、过程、包名、变更名所涉及的标识符命名短一些
gelyon 2010-01-29
  • 打赏
  • 举报
回复
还是包相同的错误!


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;
/





[Quote=引用 2 楼 suiziguo 的回复:]
未加密前的包在pl/sql里运行创建下,看看有没有错误。
若无错误,则创建后再wrap加密该包。
[/Quote]
suiziguo 2010-01-29
  • 打赏
  • 举报
回复
未加密前的包在pl/sql里运行创建下,看看有没有错误。
若无错误,则创建后再wrap加密该包。
liusong_china 2010-01-29
  • 打赏
  • 举报
回复
source.sql的内容方便贴出来看吗?

gelyon 2010-01-29
  • 打赏
  • 举报
回复
我简直无语了! 你们咋能成功,我就不行呢?我都检查过了的,没有上面问题啊!
可就是执行的时候报那个错误

SQL> @e:\p_encrypt_decrypt.sql;

Warning: Package created with compilation errors

Warning: Package body created with compilation errors

SQL> 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>
crazylaa 2010-01-29
  • 打赏
  • 举报
回复
测了,没问题啊。楼主用editplus保存试试看。create前面不要有空格,/前面也不要有空格,然后在sqlplus里面执行
liusong_china 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gelyon 的回复:]
我把source.sql中的“/”去掉
问题剩下最后一个错误了

SQL> @e:\p_encrypt_decrypt.sql

Warning: Package created with compilation errors

SQL> show error
Errors for PACKAGE ERP.P_ENCRYPT_DECRYPT:

LINE/COL ERROR
-------- ----------------------------
9/1      PLS-00103: 出现符号 "CREATE"

SQL>


[/Quote]

试试 在 end 后面加上包的名字。。

end p_encrypt_decrypt;
suiziguo 2010-01-29
  • 打赏
  • 举报
回复
@e:\source.sql时,并无错误,是吗?

host wrap iname=e:\source.sql oname=e:\p_encrypt_decrypt.sql过程中也没错误提示?

我的意思是source.sql里会不会有隐藏的特殊字符什么的,导致wrap时ORACLE加密出来的结果不正确。
你用记事本什么的,打开仔细看看,哪怕有些空白,也可能是不正确的。我曾经不止一次遇到过这样的情况。
gelyon 2010-01-29
  • 打赏
  • 举报
回复
source.sql内容和3楼贴出来的一样

保存在e盘下

PL/SQL developer中按照你的执行一样:
SQL> @e:\source.sql;

Package created

Package body created
SQL> host wrap iname=e:\source.sql oname=e:\p_encrypt_decrypt.sql
SQL> @e:\p_encrypt_decrypt.sql;

Package created

Warning: Package body created with compilation errors

SQL> 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
suiziguo 2010-01-29
  • 打赏
  • 举报
回复

难道?莫灰?或许……传说中的,RPWT。开个小玩,勿怒。

你再仔细检查原source.sql里是否有隐藏的特殊字符,然后把运行@source.sql的详细错误贴出来。我就不信邪了!
gelyon 2010-01-29
  • 打赏
  • 举报
回复
Release 10.2.0.1.0

和你一样
suiziguo 2010-01-29
  • 打赏
  • 举报
回复
PL/SQL Wrapper: Release 10.2.0.1.0

你的是什么版本?
gelyon 2010-01-29
  • 打赏
  • 举报
回复
up
为什么啊???
我这就会报错!
郁闷~~~
加载更多回复(1)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧