AS3 zip加密解密算法一

本文详细介绍了使用ActionScript3实现的zip加密解密算法,特别是针对解密过程中遇到的问题进行了深入分析。作者在调试过程中发现AS3中两个大数相乘结果不准确,导致解密失败。尽管对zip文件格式和加密解密算法有了深入理解,但该问题阻碍了开发进程。作者转向使用Java进行后台加密解密开发,并取得进展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在EncryptZip的开发中,  前端Flex要能够对加密的zip的文件进行解密, 当时网上没有这个功能的现有的代码. 由于我使用的是纯AS代码, 经过比较几个网上现有的zip文件压缩的开源代码, 我采用了nochump, 并尝试在此基础上进行扩展.

     zip的开发需要了解zip文件的压缩格式, 每个数据标志位的意义, 好在nochump的代码给出了详细的注释,在此对David Chang (dchang@nochump.com)表示由衷的感谢! 通过结合zip结构文档和nochump源代码,我一边调试,一边注释,这让我快速掌握zip的格式省了不少的时间.

    为了验证我对了解zip文件格式是否正确, 用AS编写了一个的zip解压格式测试类, 代码如下:

  

   

Refer to: http://code.google.com/p/encrypt-zip-as3-java/source/browse/trunk/EncryptZip/flex_src/nochump/util/test/TestUpzip.as

     在此时我用ActionScript3 做zip的加密解密算法验证, 发现zip解密文件时总不能正确解密, 默认解密密码为"123456" (此时后台Java没有实现zip的加密/解密功能,只负责将加密的文件传递给Flex, Flex 尝试解密), 经过跟踪调试发现问题出在_Keys[1], _Keys[1]乘以0x08088405后得到的值和计算器得到的值不一致, 即AS3出现 两个大数相乘得到的值不正确.

              _Keys[0] = uint(CRC32.update(int(_Keys[0]), byteValue));                         
              _Keys[1] = _Keys[1] + (_Keys[0] & 0xff);                        
              _Keys[1] = _Keys[1] * 0x08088405; //the value of _Keys[1] afte it mutiplys by 0x08088405 is not correct.

              _Keys[2] = uint(CRC32.update(int(_Keys[2]), (_Keys[1] >> 24) & 0xff));

    这应该是Flex Sdks或Flash Player 造成的, 我当时的用到的版本Flex Sdks3.3, Flash Player 10.0. 不知道现在这个问题有没有解决.

    两个大数相乘得到的值不正确这个问题无法逾越, 当时使EncryptZip的开发陷入的停滞.  好在此时已经对zip文件的格式很了解,也知道了zip加密/解密的相关算法, 因此我暂时停止了前端AS开发, 转向了对后台Java对zip加密/解密的开发, 开发进行的很顺利.  (未完, 请阅读AS zip加密解密算法二)

    

(转贴请注明出处)

 

 

Author:David

    Mail:xiang.okay@gmail.com

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值