位置: 编程技术 - 正文

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 轮播)

  • 劳务费增值税税率13%
  • 国税地税电子钥匙价格
  • 银行汇票可以异地跨行使用吗
  • 销项税现金流量指定
  • 商品报废了还用退货吗
  • 金蝶k3现金流量明细查询
  • 暂估一直不来票,没有纳税调整怎么办
  • 代扣代缴境外企业增值税
  • 租办公室还要交什么税
  • 公司的车辆赠送公司
  • 融资协议如何缴纳印花税
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 航天服务费530是什么?
  • 所得税费用按月还是按年算
  • 维修服务费税率是多少?
  • 备查账簿根据企业的实际需要设置没有固定的格式要求
  • 企业社会贡献总结怎么写
  • 海关增值税专用缴款书抵扣期限
  • 广告公司的成本是什么
  • 金蝶系统怎么修改库存数量
  • PHP:xml_parser_free()的用法_XML解析器函数
  • 代金券消费怎么做分录
  • 入库前的准备
  • 小规模纳税人税控设备可以抵扣吗设备
  • 注销公司账上现金多怎么调
  • wordpress用什么语言开发
  • php验证码显示不出来
  • 莱茵地区在德国哪里
  • 阿里巴巴php
  • 原生php和框架php的区别
  • 配送中心适合哪种类型的企业
  • 事业单位收入入账
  • mac怎么下载postman
  • 差旅费报销注意哪些问题
  • 资金账簿印花税按年还是按次
  • 会计六大类会计科目
  • 长期股权投资收益要交企业所得税吗
  • 不单独计价的包装物是什么意思
  • mysql 索引 key
  • 注册资本认缴到期
  • 人工费没有发票怎么入账
  • 企业管理费用科目有哪些
  • 代开租金发票的税金怎样入账?
  • 年终奖都有啥
  • 交通运输服务费税率
  • 广告费属于管理费用的哪一类
  • 预提工资如何算增值税
  • 建筑行业收到工程款延期付款利息需不需要开票
  • 开办幼儿园的流程图
  • 企业经营状态为清算是什么意思
  • 投资收益余额在贷方怎么结转
  • 所得税费用会计科目编码
  • 工业企业存货发出计价的方法
  • mysql关联语句
  • 64位win8怎么安装南天PR2E针式打印机驱动?
  • windows server 2003 密钥
  • win7怎么多分出一个盘
  • centos搭建v2
  • linux修改文件权限
  • 延迟windows更新
  • win7系统安全软件
  • windows7中彻底删除文件的操作
  • react父组件触发子组件方法
  • html中dt
  • 基于arcgis的python编程
  • python备份列表l
  • js正则检验手机号
  • Python常见格式化字符串方法小结【百分号与format方法】
  • 设置家的地址
  • 税务局投诉怎么投诉
  • 课题研究经费预算一般多少比较合适
  • 物流企业需要缴税吗
  • 怎么查行业代码是多少
  • 财税专家刘杨简历
  • 营业税发票现在可以冲红么
  • 徐州市哪些区域封闭了
  • 期货手续费怎么算
  • 四季度预缴申报表
  • 怎么查询公司法人电话号码
  • 为什么国税网上申报不了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设