查看: 8149|回复: 6

[原创] 对UTL_COMPRESS的分析

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
跳转到指定楼层
1#
发表于 2009-6-19 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.UTL_COMPRESSs.LZ_UNCOMPRESS的返回值到底是什么?
要用到下面的知识
如何识别Zlib编码
http://book.51 cto.com/art/200903/112931.htm 提到
从数据上说使用Zlib压缩的数据开头第一个字节是"x78",ASCII码是"x",而gzip的格式见附件
因此,可以认为,UTL_COMPRESSs.LZ_UNCOMPRESS返回的是gzip的格式
而select amosunwrapper.deflate见(http://www.itpub.net/viewthread. ... p;extra=&page=3)才返回真实的lz格式
2.UTL_COMPRESSs.LZ_UNCOMPRESS的传入参数是什么?
是raw还是varchar字符串?

SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('PACKAGE')) from dual;

UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B0B7074F676747705008F992DE107000000

SQL> select utl_compress.LZ_COMPRESS('PACKAGE') from dual;
select utl_compress.LZ_COMPRESS('PACKAGE') from dual
                                 *
第 1 行出现错误:
ORA-01465: 无效的十六进制数字
可见参数是raw类型,用16进制表示
3.lz格式与gzip的关系
SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('PACKAGE')) from dual;

UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B0B7074F676747705008F992DE107000000

SQL> select amosunwrapper.deflate('PACKAGE',9) from dual;

AMOSUNWRAPPER.DEFLATE('PACKAGE
--------------------------------------------------------------------------------
78DA0B7074F6767477050007CE01ED00000000000000000000000000000000000000000000000000

SQL> select amosunwrapper.deflate('FUNCTION',9) from dual;

AMOSUNWRAPPER.DEFLATE('FUNCTIO
--------------------------------------------------------------------------------
78DA730BF5730EF1F4F703000AC50267000000000000000000000000000000000000000000000000


SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('FUNCTION')) from dual;

UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B730BF5730EF1F4F70300718A9D0C08000000

DEFLATE返回值的很多尾部0是没用的,去掉也能解压。

SQL> select amosunwrapper.deflate('41424344')from dual;

AMOSUNWRAPPER.DEFLATE('4142434
--------------------------------------------------------------------------------
789C333134313231363101000736019B000000000000000000000000000000000000000000000000
SQL> select amosunwrapper.inflate('78DA333134313231363101000736019B') from dual;

AMOSUNWRAPPER.INFLATE('78DA333
--------------------------------------------------------------------------------
41424344

[ 本帖最后由 〇〇 于 2009-6-19 13:08 编辑 ]

gzip.PNG (32 KB, 下载次数: 19)

gzip.PNG

rfc1950.pdf

35.54 KB, 下载次数: 28

rfc1951.pdf

55.29 KB, 下载次数: 23

rfc1952.pdf

42.2 KB, 下载次数: 21

论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
2#
 楼主| 发表于 2009-6-19 12:56 | 只看该作者
7.6.3  常见的压缩编码特征
很多压缩过的数据中或多或少都保留了与压缩编码相关的一些特征,根据这些特征能快速识别压缩数据使用的压缩编码,表7-2和表7-3列出一些其他常见的压缩编码特征供读者研究和分析压缩数据时参考。
表7-2 压缩编码的数据特征
数据开头的特征码
    
压缩编码名称
37 7A BC AF 27 1C
7Z
7-Zip压缩编码
42 5A
BZ2,TAR.BZ2
,TBZ2,TB2
bzip2 压缩编码
1F 8B
gz
Gzip 压缩编码
50 4B 03 04
zip
Pkzip 压缩编码
4F 67 67 53 00 02
00 00 00 00 00 00 00 00
OGA, OGG,
OGV, OGX
Ogg媒体压缩编码
52 61 72 21 1A 07 00
Rar
WinRAR 压缩编码
2D 6C 68
LZH, LHA
LZH
压缩编码

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
3#
 楼主| 发表于 2009-6-19 19:55 | 只看该作者
如果要用UTL_COMPRESS.LZ_UNCOMPRESS解压deflate文件,看来不太可能,要自己造出校验部分

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
4#
 楼主| 发表于 2009-6-20 16:11 | 只看该作者

利用zlib.zip中的minigzip产生了'FUNCTION'的gz文件与utl_compress.LZ_COMPRESS相同

D:\lt\dl\zlib>copy con fun
FUNCTION^Z
已复制         1 个文件。

D:\lt\dl\zlib>minigzip fun

D:\lt\dl\zlib>fc /b fun.gz example.c
正在比较文件 fun.gz 和 EXAMPLE.C
00000000: 1F 2F
00000001: 8B 2A
00000002: 08 20
00000003: 00 65
00000004: 00 78
00000005: 00 61
00000006: 00 6D
00000007: 00 70
00000008: 00 6C
00000009: 0B 65
0000000A: 73 2E
0000000B: 0B 63
0000000C: F5 20
0000000D: 73 2D
0000000E: 0E 2D
0000000F: F1 20
00000010: F4 75
00000011: F7 73
00000012: 03 61
00000013: 00 67
00000014: 71 65
00000015: 8A 20
00000016: 9D 65
00000017: 0C 78
00000018: 08 61
00000019: 00 6D
0000001A: 00 70
0000001B: 00 6C
FC: EXAMPLE.C 比 fun.gz 长

使用道具 举报

回复
论坛徽章:
32
祖国60周年纪念徽章
日期:2009-10-09 08:28:002013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-06-28 11:09:23ITPUB季度 技术新星
日期:2013-07-30 16:04:58优秀写手
日期:2013-12-18 09:29:132014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09红孩儿
日期:2014-03-04 16:40:38美羊羊
日期:2015-02-16 16:36:28懒羊羊
日期:2015-03-04 14:52:11
5#
发表于 2009-11-17 10:53 | 只看该作者
那么对于oracle的dbms_ddl.wrap这个加密工具,他用的是lz压缩还是gzip压缩呢?我实验了下,好象是lz压缩。因此在解密wrap包的时候,如果想用utl_compress.lz_uncompress去解压缩,实际上是不可行的,我在执行的时候出现了ora-29294的压缩数据格式错误的信息,看来非得要用amosunwrapper.inflate才行。是不是Oracle本身没有可以对lz压缩数据进行解压缩的工具了?某种程度上讲Oracle是不是为了防止自己的源码被破解所以才没有支持lz解压缩?

使用道具 举报

回复
论坛徽章:
1
2010新春纪念徽章
日期:2010-03-01 11:06:18
6#
发表于 2010-2-17 19:37 | 只看该作者
hao

使用道具 举报

回复
论坛徽章:
7
2013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-01-15 06:00:15问答徽章
日期:2014-02-08 10:20:44马上有车
日期:2014-03-01 22:23:13沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:58:182016猴年福章
日期:2016-02-23 09:58:34
7#
发表于 2017-2-23 09:15 | 只看该作者
如何使用UTL_COMPRESS.LZ_UNCOMPRESS对BLOB字段解压呢

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表