位置: 编程技术 - 正文

android解压带密码的zip包(android解压app)

编辑:rootadmin

推荐整理分享android解压带密码的zip包(android解压app),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓解压带密码的压缩包,安卓解压密码压缩包,android 解压,安卓解压密码压缩包,安卓密码解压软件,安卓解压带密码,安卓解压带密码的压缩包,安卓 解压密码,内容如对您有帮助,希望把文章链接给更多的朋友!

网上找到的资料,还没试过,谁要是试了回复下吧。

android解压带密码的zip包(android解压app)

原文出自: a recent “fun” project, I needed my application to be able to access password-protected zip files of a particular format. It was one of these features I thought will take me no time to implement. Anyway, to my surprise, neither JDK supports password-protected ZIP files, nor I was able to find a suitable Java open source library I could use for that purpose. So, I ended up writing the utility class on my own. I wrote an implementation ofjava.io.InputStream that filters the ZIP file data and turns a password-protected ZIP into an unprotected one on the fly – so the stream can be nicely chained withjava.util.zip.ZipInputStream. Although the class is specifically targeted at the particular type of ZIP files I had to deal with (see the limitations below), maybe other people have to deal with the same type of files, or this class can provide a good start for others to turn it into a utility that would work with any type of ZIP (maybe I will do it myself some day – for now I don’t have time).To implement this class I used the ZIP File Format Specification as the source of information. I also used the 7-zip project (C&#;&#;) as a reference during the debugging to verify my understanding of the ZIP spec. and the CRC algorithm.So, here is the class:

?import java.io.IOException;import java.io.InputStream; public class ZipDecryptInputStream extendsInputStream { privatestatic final int[] CRC_TABLE = newint[]; // compute the table // (could also have it pre-computed - static{ for(int i = 0; i < ; i&#;&#;) { intr = i; for(int j = 0; j < 8; j&#;&#;) { if((r & 1) ==1) { r = (r >>>1) ^ 0xedb; }else { r >>>=1; } } CRC_TABLE[i] = r; } } privatestatic final int DECRYPT_HEADER_SIZE = ; privatestatic final int[] LFH_SIGNATURE = {0x,0x4b, 0x,0x}; privatefinal InputStream delegate; privatefinal String password; privatefinal int keys[] = new int[3]; privateState state = State.SIGNATURE; privateint skipBytes; privateint compressedSize; privateint value; privateint valuePos; privateint valueInc; publicZipDecryptInputStream(InputStream stream, String password) { this.delegate = stream; this.password = password; } @Override publicint read() throwsIOException { intresult = delegate.read(); if(skipBytes == 0) { switch(state) { caseSIGNATURE: if(result != LFH_SIGNATURE[valuePos]) { state = State.TAIL; }else { valuePos&#;&#;; if(valuePos >= LFH_SIGNATURE.length) { skipBytes =2; state = State.FLAGS; } } break; caseFLAGS: if((result & 1) ==0) { thrownew IllegalStateException("ZIP not password protected."); } if((result & ) ==) { thrownew IllegalStateException("Strong encryption used."); } if((result & 8) ==8) { thrownew IllegalStateException("Unsupported ZIP format."); } result -=1; compressedSize =0; valuePos =0; valueInc = DECRYPT_HEADER_SIZE; state = State.COMPRESSED_SIZE; skipBytes =; break; caseCOMPRESSED_SIZE: compressedSize &#;= result << (8* valuePos); result -= valueInc; if(result < 0) { valueInc =1; result &#;=; }else { valueInc =0; } valuePos&#;&#;; if(valuePos > 3) { valuePos =0; value =0; state = State.FN_LENGTH; skipBytes =4; } break; caseFN_LENGTH: caseEF_LENGTH: value &#;= result <<8 * valuePos; if(valuePos == 1) { valuePos =0; if(state == State.FN_LENGTH) { state = State.EF_LENGTH; }else { state = State.HEADER; skipBytes = value; } }else { valuePos =1; } break; caseHEADER: initKeys(password); for(int i = 0; i < DECRYPT_HEADER_SIZE; i&#;&#;) { updateKeys((byte) (result ^ decryptByte())); result = delegate.read(); } compressedSize -= DECRYPT_HEADER_SIZE; state = State.DATA; // intentionally no break caseDATA: result = (result ^ decryptByte()) &0xff; updateKeys((byte) result); compressedSize--; if(compressedSize == 0) { valuePos =0; state = State.SIGNATURE; } break; caseTAIL: // do nothing } }else { skipBytes--; } returnresult; } @Override publicvoid close() throwsIOException { delegate.close(); super.close(); } privatevoid initKeys(String password) { keys[0] =; keys[1] =; keys[2] =; for(int i = 0; i < password.length(); i&#;&#;) { updateKeys((byte) (password.charAt(i) &0xff)); } } privatevoid updateKeys(bytecharAt) { keys[0] = crc(keys[0], charAt); keys[1] &#;= keys[0] &0xff; keys[1] = keys[1] * &#; 1; keys[2] = crc(keys[2], (byte) (keys[1] >>)); } privatebyte decryptByte() { inttemp = keys[2] |2; return(byte) ((temp * (temp ^1)) >>> 8); } privateint crc(intoldCrc, byte charAt) { return((oldCrc >>> 8) ^ CRC_TABLE[(oldCrc ^ charAt) &0xff]); } privatestatic enum State { SIGNATURE, FLAGS, COMPRESSED_SIZE, FN_LENGTH, EF_LENGTH, HEADER, DATA, TAIL }}

These are the limitations:

Only the “Traditional PKWARE Encryption” is supported (spec. section VII)Files that have the “compressed length” information at the end of the data section (rather than at the beginning) are not supported (see “general purpose bit flag”, bit 3 in section V, subsection J in the spec.)

And this is how you can use it in your code:

?import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream; // usage: java Main [filename] [password]public class Main { publicstatic void main(String[] args) throws IOException { // password-protected zip file I need to read FileInputStream fis =new FileInputStream(args[0]); // wrap it in the decrypt stream ZipDecryptInputStream zdis =new ZipDecryptInputStream(fis, args[1]); // wrap the decrypt stream by the ZIP input stream ZipInputStream zis =new ZipInputStream(zdis); // read all the zip entries and save them as files ZipEntry ze; while((ze = zis.getNextEntry()) != null) { FileOutputStream fos =new FileOutputStream(ze.getName()); intb; while((b = zis.read()) != -1) { fos.write(b); } fos.close(); zis.closeEntry(); } zis.close(); }}Previous Entry: Jersey Hands-On LabNext Entry: Jersey and Cross-Site Request Forgery (CSRF)

Android中的轮播图 刚忙完了公司的项目,总算有些时间了,所以自己模仿公司的项目做了一些小demo,以后用。轮播图的效果,在Android的项目当中是比较常见的,其实现原

NUPT_移动应用开发 课程性质:本课程为南邮计算机科学与技术限选课,学分:2。学习回顾:主要分为四次大课,都在星期六。老师上课主要是以导论的形式对android开发进

使用开源库RoundedImageView 创建圆角ImageView以及引用时遇到的问题 转载请标明出处:

标签: android解压app

本文链接地址:https://www.jiuchutong.com/biancheng/386080.html 转载请保留说明!

上一篇:Android 开发中的零散知识点(Android开发中的几种管理机制的使用场景是什么)

下一篇:Android中的轮播图(android 轮播)

  • 增量留底退税基数是多少?
  • 税控盘及服务费会计分录
  • 供电车间工人薪酬计入什么科目
  • 电子发票怎么开具
  • 核定扣除公式
  • 技术开发收入免征所得税吗
  • 合并抵消分录的原理是什么
  • 房地产公司将自建自用房产出售 土地增值税
  • 纳税申报成功
  • 境外代扣代缴的税最后归谁所有
  • 印花税销售分录
  • 进项增值税发票怎么认证
  • 2016年的发票2020年可以认证吗
  • 关于支付税审费的问题
  • 兼职取酬案例剖析
  • 国家对发票开具时间有没有具体规定?
  • 增值税5%的税率怎么算
  • 研发费用如何界定
  • 过路费增值税可以抵扣吗
  • 营改增后不动产发票样本
  • 税务异常不处理会的后果
  • 预付账款属于资产性质的账户
  • 期末未抵扣数
  • 固定资产进项发票
  • 工资及社保外包服务
  • rtfd文件
  • 局域网故障可能的原因
  • 企业核定征收管理办法
  • php ftell
  • 劳务资质办理需要什么条件
  • 金融资产减值损失计入什么科目
  • 出口退税转内销的话如何算发票金额
  • 公网访问内网主机
  • win10蓝牙共享网络给手机
  • php中的include
  • 任意公积金可以不提取吗
  • 前端打包后生成文件
  • thinkphp框架介绍
  • conda配置虚拟环境
  • linux中web服务器的安装,配置与测试
  • js数组方法大全
  • 人工智能答案
  • 机器学习——感知机
  • 合同发票收款付款管理系统源码
  • 购买需要安装的设备计入什么科目
  • 专票当天可以领取吗
  • mysql 使用索引
  • 公司向个人支付居间费用
  • 取得投资是什么意思
  • 低值易耗品摊销会计处理
  • 企业工会经费计提比例
  • 公司贷款 利息
  • 库存商品过期报废会计分录
  • 增值税专用发票几个点
  • 应收账款多记账怎么做调整分录
  • 发工资时多打给员工的钱
  • 营业外收入记入企业的什么
  • 收到进项税发票
  • 机器设备进项税率
  • 库存商品的成本计算
  • 设置会计账簿应当遵循的基本原则有
  • 分析sql语句性能实现
  • 微软the initiative
  • win7提示0x000000c1
  • win7定时静音
  • 如何下载安装windows10
  • win10系统中打开任务管理器的快捷键
  • perl脚本输出变量
  • js类继承的几种方式
  • jquery基础知识
  • jQuery插件开发
  • jQuery使用$.ajax进行即时验证实例详解
  • jQuery插件在使用前都需要引入jQuery的js文件
  • android 自定义dialog
  • python 脚本编写
  • 安卓中五种常见布局的特点
  • 电子税务局打印发票提示本机未检测到
  • 生猪屠宰企业报价
  • 珠海市香洲区有火车站吗
  • 岗位能手竞赛
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设