位置: 编程技术 - 正文

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

  • 运输行业一般纳税人税率
  • 代扣代缴个人所得税账务处理
  • 各行业的税负率表2022
  • 工程建设期间发生的业务招待费
  • 公司欠款利息收入需要交增值税吗?
  • 汇算清缴结束后,税务机关发现企业应当取得
  • 短期借款会计科目使用说明
  • 基金投资债券会赔吗
  • 差旅费应纳入社保缴费基数吗?
  • 其他业务收入的核算内容
  • 库存商品报废进项转出
  • 定额发票用来干嘛
  • 企业自行去税务开具房租发票税款怎么做?
  • 混业经营试点
  • 劳务派遣企业差额扣除占比过高怎么办
  • 一个季度为纳税期限的规定适用
  • 总公司集中支付说明
  • 经营租赁固定资产折旧计入什么科目
  • 反写状态已反写是什么意思
  • 可转债税前收益和税后收益
  • 公司充加油卡发票税额为0 怎么入账
  • 进项票税率不同怎么处理
  • 发票失联企业不处理的后果
  • 闲置房屋
  • 银行承兑汇票没有提示付款
  • 出口销售收入记账方法有哪些?
  • 结转电费成本会计分录
  • 充值至他人支付账户
  • 购入已提足折旧的固定资产
  • windows 11截图
  • php中的预定义变量
  • vue3如何使用axios
  • 国税一证通
  • thinkphp i方法
  • 路径规划是什么意思
  • c#开发入门及项目实战
  • 2、传统的目标设定过程目的重在________
  • css如何应用
  • es restful api文档
  • 长期待摊费用如何处理
  • 教育局是一般纳税人吗
  • 个人社保交错了怎么办
  • 证券公司收益凭证管理办法
  • 兼职人员工资需要交个税吗
  • 企业所得税不能税前扣除项目
  • 医药发票的税率是多少
  • 暂估价和实际价格不一致的处理方式
  • 外经证如何缴税
  • 进项税额转出有什么好处
  • 设备安装成本怎么结转
  • 专项应付款如何核算
  • 销售加工费怎么记账
  • 固定资产出售增值税减按2%征收,附表一,填写
  • 预付账款在何时可以转出
  • 出纳现金业务流程图
  • 税收奖励账务处理
  • 18年水利基金税率
  • windows下修改uuid的工具
  • vista win
  • win7开机黑屏怎么
  • ip地址xp系统
  • WIN10系统摄像头在哪打开
  • win10每周更新
  • linux系统怎么弄
  • linux常用桌面环境
  • javascriptwhile
  • php消息队列面试题及答案
  • shell for循环执行命令
  • linux怎么使用shell脚本
  • unity3d动态加载资源
  • 简要说明javascript的作用
  • js获取浏览器类型和版本信息
  • 创建javascript对象
  • Linux 中的 lo:0
  • Activity的生命周期和页面之间的传递
  • 补充协议需要双方签字盖章吗
  • 重庆电子税务局怎么绑定办税人员
  • 电子税务局辽宁省
  • 包头市到青山区多少公里
  • 北京地税局上班时间查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设