JAVA实现ZIP文件加密解密
java 密码加密解密方法
java 密码加密解密方法在Java中,密码的加密和解密可以通过多种方式实现。
其中,常用的方法包括使用MessageDigest类进行加密,以及使用对称加密和非对称加密算法进行加密和解密。
一种常见的密码加密方法是使用MessageDigest类进行加密。
这可以通过以下步骤实现:首先,将密码转换为字节数组。
然后,使用MessageDigest类的getInstance方法获取特定的加密算法实例,例如SHA-256或MD5。
接下来,使用update方法将密码的字节数组传递给MessageDigest实例。
最后,使用digest方法获得加密后的字节数组,并将其转换为十六进制字符串或其他格式存储在数据库或其他地方。
另一种常见的方法是使用对称加密算法,例如AES或DES。
这些算法使用相同的密钥进行加密和解密。
在Java中,可以使用javax.crypto包中的类来实现对称加密。
通常,需要生成一个密钥并将其存储在安全的地方,然后使用该密钥对密码进行加密和解密。
此外,还可以使用非对称加密算法,例如RSA。
这种方法使用公钥对数据进行加密,然后使用私钥进行解密。
在Java中,可以使用java.security包中的类来实现非对称加密。
无论使用哪种方法,都需要注意密码安全的问题。
例如,密钥的安全存储和管理,以及密码传输过程中的安全性。
另外,还需要考虑密码的哈希加盐等技术来增加密码的安全性。
总之,在Java中实现密码的加密和解密有多种方法,开发人员可以根据实际需求和安全要求选择合适的加密算法和实现方式。
希望这些信息能够帮助你更好地理解Java中密码加密解密的方法。
使用Java实现安全性加密与解密
使用Java实现安全性加密与解密在当今信息时代,数据的安全性越来越受到重视。
无论是个人的隐私信息还是企业的商业机密,都需要得到有效的保护。
而加密与解密技术就是一种常用的保护数据安全的手段。
本文将介绍如何使用Java语言实现安全性加密与解密。
1. 加密与解密的基本概念加密是将明文转换为密文的过程,而解密则是将密文转换回明文的过程。
加密算法通常使用一个密钥,密钥用于控制加密过程的转换规则,只有拥有正确的密钥才能进行解密。
常见的加密算法有对称加密算法和非对称加密算法。
对称加密算法使用相同的密钥进行加密和解密,速度较快,但密钥的传输和管理相对困难。
非对称加密算法使用一对密钥,公钥用于加密,私钥用于解密,安全性较高,但速度较慢。
2. 使用Java实现对称加密Java提供了多种对称加密算法的实现,如DES、AES等。
下面以AES算法为例,介绍如何使用Java实现对称加密。
首先,需要导入Java加密扩展(JCE)的包。
在Java 8及以上版本中,JCE已经被默认包含在JDK中,无需额外导入。
接下来,可以使用以下代码进行AES加密:```javaimport javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class AESUtil {private static final String ALGORITHM = "AES";public static String encrypt(String plainText, String key) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());return Base64.getEncoder().encodeToString(encryptedBytes);}public static String decrypt(String encryptedText, String key) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(encryptedBytes);return new String(decryptedBytes);}}```以上代码中,`encrypt`方法用于对明文进行加密,`decrypt`方法用于对密文进行解密。
zip压缩文件密码的解密方法
文章标题:解密zip压缩文件密码的方法1. 引言在日常生活中,我们经常会遇到需要使用zip压缩文件的情况。
然而,有时候我们会遇到遗忘密码的情况,或者需要破解别人设置的密码。
本文将深入探讨zip压缩文件密码的解密方法,帮助读者从简到繁,由浅入深地理解这一主题。
2. 基本概念让我们来了解一下zip文件加密的基本概念。
zip文件是一种常见的文件压缩格式,通过密码对zip文件进行加密可以保护文件的安全性。
密码是通过加密算法对文件进行处理,只有输入正确的密码才能解密文件。
zip文件密码的解密实质上是破解加密算法,找到正确的密码。
3. 简单解密方法对于简单的zip文件密码,我们可以尝试一些容易破解的方法。
使用常见的密码,尝试生日、通信方式号码、纪念日等可能与文件所有者相关的信息。
我们还可以尝试使用一些常见密码字典,如123456、password等,进行暴力破解。
这些简单的方法可能会在一定程度上帮助我们找到密码。
4. 破解工具的使用除了简单的方法,我们还可以利用一些破解工具进行密码的破解。
有一些专门针对zip文件的破解软件,通过暴力破解或者字典破解的方式,可以大大提高密码破解的成功率。
一些密码管理工具也提供了zip 文件密码找回的功能,可以帮助用户找回或者重置密码。
5. 高级密码破解技术如果遇到较为复杂的密码,简单的方法和破解工具可能无法满足我们的需求。
这时,我们可以尝试一些高级密码破解技术,如使用暴力破解软件配合GPU加速,或者使用社会工程学的手段获取密码提示信息。
当然,这些方法需要一定的计算机技术和经验,需要谨慎使用并且遵守法律规定。
6. 个人观点和理解从我个人的角度来看,密码的保护和破解是一个技术和道德并存的问题。
在使用密码进行加密时,我们应该选择足够复杂的密码,并且定期更换以保护文件的安全。
对于忘记密码的情况,我们可以尝试一些方法找回密码,但需要注意合法合规,避免非法破解行为。
7. 总结通过本文的探讨,我们对zip文件密码的解密方法有了全面的认识。
JavaZIP压缩和解压缩文件(解决中文文件名乱码问题)
JavaZIP压缩和解压缩⽂件(解决中⽂⽂件名乱码问题)JDK中⾃带的ZipOutputStream在压缩⽂件时,如果⽂件名中有中⽂,则压缩后的zip⽂件打开时发现中⽂⽂件名变成乱码.解决的⽅法是使⽤apache-ant-zip.jar包(见附件)中的ZipOutputStream和ZipEntry.即,导⼊类:import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;并且注意,压缩之前调⽤ZipOutputStream的out.setEncoding(System.getProperty("sun.jnu.encoding"));⽅法,系统参数sun.jnu.encoding表⽰获取当前系统中的⽂件名的编码⽅式.这⾥将ZipOutputStream的⽂件名编码⽅式设置成系统的⽂件名编码⽅式.解压时,直接使⽤JDK原来的ZipInputStream即可.但是有个需要注意的地⽅是,在读取ZIP⽂件之前,需要设置:System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));将系统的ZIP编码格式设置为系统⽂件名编码⽅式,否则解压时报异常.import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;改为import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;ant包⾥提供ZipOutputStream类的setEncoding("gbk")⽅法。
zos.setEncoding("gbk");。
java对压缩文件进行加密,winrar和好压直接输入解密密码来使用
java对压缩⽂件进⾏加密,winrar和好压直接输⼊解密密码来使⽤<!-- https:///artifact/net.lingala.zip4j/zip4j --><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version></dependency>或者下载zip4j-1.3.2.jar以下是对⽂件压缩的⽅法,这⾥只是单个⽂件压缩,多个变通⼀下就可以。
package com.yggdrasill.foura.web.sysadmin.backup.service;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;import java.io.*;import java.util.ArrayList;public class ZipComplexCipherUtil {/*** 加密1,winrar,好压2345可直接输⼊密码解压* 根据filepath读取⽂件并加密返回*/public static void zipFileAndEncrypt(String filePath,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//压缩⽂件,并⽣成压缩⽂件ArrayList<File> filesToAdd = new ArrayList<File>();File file = new File(filePath);filesToAdd.add(file);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addFiles(filesToAdd, parameters);//this line does worksSystem.err.println("end");} catch (ZipException e) {e.printStackTrace();}}/*** 加密1,winrar,好压2345可直接输⼊密码解压*/public static void zipFileStream(InputStream is,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//addStream,多设置两个参数,缺⼀不可parameters.setFileNameInZip("yourfilename.xlsx");parameters.setSourceExternalStream(true);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addStream(is, parameters);} catch (ZipException e) {e.printStackTrace();}}public static ZipParameters setParam(String password){//设置压缩⽂件参数ZipParameters parameters = new ZipParameters();//设置压缩⽅法parameters.setCompressionMethod(P_DEFLATE);//设置压缩级别parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//设置压缩⽂件是否加密parameters.setEncryptFiles(true);//设置aes加密强度parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);//设置加密⽅法parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);//设置密码parameters.setPassword(password.toCharArray());return parameters;}public static void main(String[] args) throws Exception {try{long l1 = System.currentTimeMillis();////加密,addFile// ZipComplexCipherUtil.zipFileAndEncrypt("D:\\aaa\\zhmm_db.xlsx","D:\\aaa\\ccc.zip","123");// 加密,addStreamInputStream in = new FileInputStream("D:\\aaa\\zhmm_db.xlsx"); ZipComplexCipherUtil.zipFileStream(in,"D:\\aaa\\ccc.zip","123");long l2 = System.currentTimeMillis();System.out.println((l2 - l1) + "毫秒.");System.out.println(((l2 - l1) / 1000) + "秒.");}catch(Exception ex){ex.printStackTrace();}}}。
java中常用的zip加密方法
文稿:标题:深度探讨Java中常用的Zip加密方法在日常编程开发中,我们经常会遇到对文件进行压缩和加密的需求。
而在Java中,Zip是一种常用的文件压缩格式,而对Zip文件进行加密也是经常需求之一。
本文将从简单到复杂,由浅入深地探讨Java中常用的Zip加密方法,以帮助您全面理解和灵活运用这一技术。
一、基本概念:Zip文件和加密方法在谈论Zip加密方法之前,我们首先来了解一下Zip文件的基本概念以及加密方法的原理。
Zip文件是一种常见的文件压缩格式,它能将多个文件或文件夹打包成一个文件,以减小文件大小,便于传输和存储。
而加密则是通过对文件内容进行转换或者使用密码算法,以使文件内容对他人不可读或不可用。
二、Zip加密的基本用法在Java中,可以使用`java.util.zip`包中的`ZipOutputStream`和`ZipEntry`类来对文件进行压缩,同时也可以通过密码来对Zip文件进行加密和解密。
通过简单的示例代码,我们可以很容易地了解到如何使用Java对Zip文件进行加密和解密的基本用法。
三、常见的Zip加密方法除了基本用法之外,Java中还提供了一些常见的Zip加密方法,如使用密码对Zip文件进行加密、使用AES算法对Zip文件进行加密等。
这些方法各自有着不同的特点和适用场景,我们可以根据需求选择最合适的方法来进行实现。
四、实践操作:示例演练在本节中,我们将结合实际的示例演练来对之前所学习到的Zip加密方法进行实际操作。
通过实际的演练,我们可以更加深入地理解和掌握这些方法的具体细节和注意事项。
五、个人观点和总结在本节中,我将共享我的个人观点和理解,以及对Zip加密方法在实际开发中的应用和注意事项进行总结和回顾。
通过对Zip加密方法的全面评估和实际应用,我们可以更好地掌握这一技术,并在实际项目中灵活运用。
结语通过本文的深度探讨和示例演练,我相信您已经对Java中常用的Zip 加密方法有了更深入的理解和掌握。
Java代码中的(解压7z加密版)
Java代码中的(解压7z加密版)maven:需要加上这个下载这两个包<dependency><groupId>net.sf.sevenzipjbinding</groupId><artifactId>sevenzipjbinding</artifactId><version>9.20-2.00beta</version></dependency><dependency><groupId>net.sf.sevenzipjbinding</groupId><artifactId>sevenzipjbinding-all-platforms</artifactId><version>9.20-2.00beta</version></dependency>普通的架构:需要⾃⼰下载sevenzipjbinding-9.20-2.00beta.jarsevenzipjbinding-all-platforms-9.20-2.00beta.jar/**** @Description (解压7z)* @param file7zPath(7z⽂件路径)* @param outPutPath(解压路径)* @param passWord(⽂件密码.没有可随便写,或空)* @return* @throws Exception*/public static int un7z(String file7zPath, final String outPutPath, String passWord) throws Exception { IInArchive archive;RandomAccessFile randomAccessFile;randomAccessFile = new RandomAccessFile(file7zPath, "r");archive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile), passWord); int numberOfItems = archive.getNumberOfItems();ISimpleInArchive simpleInArchive = archive.getSimpleInterface();for (final ISimpleInArchiveItem item : simpleInArchive.getArchiveItems()) {final int[] hash = new int[] { 0 };if (!item.isFolder()) {ExtractOperationResult result;final long[] sizeArray = new long[1];result = item.extractSlow(new ISequentialOutStream() {public int write(byte[] data) throws SevenZipException {try {IOUtils.write(data, new FileOutputStream(new File(outPutPath + File.separator + item.getPath()),true));} catch (Exception e) {e.printStackTrace();}hash[0] ^= Arrays.hashCode(data); // Consume datasizeArray[0] += data.length;return data.length; // Return amount of consumed}},passWord);if (result == ExtractOperationResult.OK) {logger.error("解压成功...." +String.format("%9X | %10s | %s", hash[0], sizeArray[0], item.getPath()));// LogUtil.getLog().debug(String.format("%9X | %10s | %s", hash[0], sizeArray[0], item.getPath()));} else {logger.error("解压失败:密码错误或者其他错误...." +result);// LogUtil.getLog().debug("Error extracting item: " + result);}}}archive.close();randomAccessFile.close();return numberOfItems;}/***不含加密,普通解压**/// 解压.Z⽂件如:D:/test/test.Z D:/test/test.txtpublic static void unZFile(String inFileName, String outFileName) { InputStream inputStream = null;OutputStream outputStream = null;try {inputStream = new FileInputStream(inFileName);inputStream = new UncompressInputStream(inputStream);File file = new File(outFileName);outputStream = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[100000];while ((bytesRead = inputStream.read(buffer, 0, 100000)) != -1) { outputStream.write(buffer, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();logger.error("unZFile Exception " + e.getMessage());} finally {if(outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();logger.error("outputStream Close Exception " + e.getMessage()); }}if(inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();logger.error("inputStream Close Exception "+ e.getMessage());}}}}。
java国密加密与解密流程
java国密加密与解密流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 引入国密相关的依赖库在 Java 项目中,需要引入国密相关的依赖库,例如 Bouncy Castle 库。
java密码加密解密方法
Java密码加密解密方法一、引言在计算机系统中,信息安全是至关重要的一环。
其中,密码加密和解密是最常见的安全措施之一。
Java作为一种广泛使用的编程语言,提供了丰富的加密解密方法和库。
Java中的密码加密解密方法介绍如下。
二、Java加密解密基础在Java中,加密和解密是通过密钥进行的。
加密是将明文(原始数据)转换为密文(难以理解的数据),而解密则是将密文转换回明文。
这两个过程都需要使用到密钥。
Java提供了两种主要的加密技术:对称加密和非对称加密。
对称加密是指加密和解密使用同一个密钥,而非对称加密则是指加密和解密使用不同的密钥。
三、Java对称加密解密方法1. Java内置的加密解密方法:Java提供了一套内置的加密解密方法,主要包括MessageDigest、Cipher等类。
2. Java加密体系:Java加密体系主要包括JCE(Java Cryptography Extension)和JKS(Java KeyStore)。
JCE提供了一系列的加密算法,如AES、DES、RSA等。
JKS 则是用来存储密钥和证书的。
3. 对称加密的示例代码:以下是一个简单的对称加密解密的示例代码。
import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class Main {public static void main(String[] args) throws Exception {String key = "1234567890123456"; // 密钥String data = "Hello, World!"; // 要加密的数据// 创建密钥SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");// 创建并初始化Cipher对象Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 加密数据byte[] encryptedData = cipher.doFinal(data.getBytes());System.out.println("Encrypted data: " + new String(encryptedData));// 创建并初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, secretKey);// 解密数据byte[] decryptedData = cipher.doFinal(encryptedData);System.out.println("Decrypted data: " + new String(decryptedData));}}四、Java非对称加密解密方法1. Java内置的非对称加密解密方法:Java提供了一套内置的非对称加密解密方法,主要包括KeyPairGenerator、KeyPair、Cipher等类。
Java解压和压缩带密码的zip文件过程详解
Java解压和压缩带密码的zip⽂件过程详解前⾔JDK⾃带的ZIP操作接⼝(java.util.zip包,请参看⽂章末尾的博客链接)并不⽀持密码,甚⾄也不⽀持中⽂⽂件名。
为了解决ZIP压缩⽂件的密码问题,在⽹上搜索良久,终于找到了winzipaes开源项⽬。
该项⽬在下托管,仅⽀持AES压缩和解压zip⽂件( This library only supports Win-Zip's 256-Bit AES mode.)。
⽹站上下载的⽂件是源代码,最新版本为winzipaes_src_20120416.zip,本⽰例就是在此基础上编写。
详述项⽬使⽤很简单,利⽤源码⾃⼰导出⼀个jar⽂件,在项⽬中引⽤即可。
这⾥有⼀个需要注意的问题,就是如果给定ZIP⽂件没有密码,那么就不能使⽤该项⽬解压,如果压缩⽂件没有密码却使⽤该项⽬解压在这⾥会报⼀个异常,所以使⽤中需要注意:加密ZIP⽂件可以使⽤它解压,没有加密的就需要采取其它⽅式了。
此⽂就是采⽤修改后的winzipaes编写,并记录详细修改步骤。
⽰例在研究该项⽬时写了⼀个⼯具类,本来准备⽤在项⽬中,最后找到了更好的解决⽅案zip4j来代替,所以最终没有采⽤。
package com.ninemax.demo.zip.decrypt;import java.io.File;import java.io.IOException;import java.util.List;import java.util.zip.DataFormatException;import mons.io.FileUtils;import de.idyl.winzipaes.AesZipFileDecrypter;import de.idyl.winzipaes.AesZipFileEncrypter;import de.idyl.winzipaes.impl.AESDecrypter;import de.idyl.winzipaes.impl.AESDecrypterBC;import de.idyl.winzipaes.impl.AESEncrypter;import de.idyl.winzipaes.impl.AESEncrypterBC;import de.idyl.winzipaes.impl.ExtZipEntry;/*** 压缩指定⽂件或⽬录为ZIP格式压缩⽂件* ⽀持中⽂(修改源码后)* ⽀持密码(仅⽀持256bit的AES加密解密)* 依赖bcprov项⽬(bcprov-jdk16-140.jar)** @author zyh*/public class DecryptionZipUtil {/*** 使⽤指定密码将给定⽂件或⽂件夹压缩成指定的输出ZIP⽂件* @param srcFile 需要压缩的⽂件或⽂件夹* @param destPath 输出路径* @param passwd 压缩⽂件使⽤的密码*/public static void zip(String srcFile,String destPath,String passwd) {AESEncrypter encrypter = new AESEncrypterBC();AesZipFileEncrypter zipFileEncrypter = null;try {zipFileEncrypter = new AesZipFileEncrypter(destPath, encrypter);/*** 此⽅法是修改源码后添加,⽤以⽀持中⽂⽂件名*/zipFileEncrypter.setEncoding("utf8");File sFile = new File(srcFile);/*** AesZipFileEncrypter提供了重载的添加Entry的⽅法,其中:* add(File f, String passwd)* ⽅法是将⽂件直接添加进压缩⽂件** add(File f, String pathForEntry, String passwd)* ⽅法是按指定路径将⽂件添加进压缩⽂件* pathForEntry - to be used for addition of the file (path within zip file)*/doZip(sFile, zipFileEncrypter, "", passwd);} catch (IOException e) {e.printStackTrace();} finally {try {zipFileEncrypter.close();} catch (IOException e) {e.printStackTrace();}}}/*** 具体压缩⽅法,将给定⽂件添加进压缩⽂件中,并处理压缩⽂件中的路径* @param file 给定磁盘⽂件(是⽂件直接添加,是⽬录递归调⽤添加)* @param encrypter AesZipFileEncrypter实例,⽤于输出加密ZIP⽂件* @param pathForEntry ZIP⽂件中的路径* @param passwd 压缩密码* @throws IOException*/private static void doZip(File file, AesZipFileEncrypter encrypter,String pathForEntry, String passwd) throws IOException {if (file.isFile()) {pathForEntry += file.getName();encrypter.add(file, pathForEntry, passwd);return;}pathForEntry += file.getName() + File.separator;for(File subFile : file.listFiles()) {doZip(subFile, encrypter, pathForEntry, passwd);}}/*** 使⽤给定密码解压指定压缩⽂件到指定⽬录* @param inFile 指定Zip⽂件* @param outDir 解压⽬录* @param passwd 解压密码*/public static void unzip(String inFile, String outDir, String passwd) {File outDirectory = new File(outDir);if (!outDirectory.exists()) {outDirectory.mkdir();}AESDecrypter decrypter = new AESDecrypterBC();AesZipFileDecrypter zipDecrypter = null;try {zipDecrypter = new AesZipFileDecrypter(new File(inFile), decrypter);AesZipFileDecrypter.charset = "utf-8";/*** 得到ZIP⽂件中所有Entry,但此处好像与JDK⾥不同,⽬录不视为Entry* 需要创建⽂件夹,entry.isDirectory()⽅法同样不适⽤,不知道是不是⾃⼰使⽤错误 * 处理⽂件夹问题处理可能不太好*/List<ExtZipEntry> entryList = zipDecrypter.getEntryList();for(ExtZipEntry entry : entryList) {String eName = entry.getName();String dir = eName.substring(0, stIndexOf(File.separator) + 1);File extractDir = new File(outDir, dir);if (!extractDir.exists()) {FileUtils.forceMkdir(extractDir);}/*** 抽出⽂件*/File extractFile = new File(outDir + File.separator + eName);zipDecrypter.extractEntry(entry, extractFile, passwd);}} catch (IOException e) {e.printStackTrace();} catch (DataFormatException e) {e.printStackTrace();} finally {try {zipDecrypter.close();} catch (IOException e) {e.printStackTrace();}}}/*** 测试* @param args*/public static void main(String[] args) {/*** 压缩测试* 可以传⽂件或者⽬录*/// zip("M:\\ZIP\\test\\bb\\a\\t.txt", "M:\\ZIP\\test\\temp1.zip", "zyh");// zip("M:\\ZIP\\test\\bb", "M:\\ZIP\\test\\temp2.zip", "zyh");unzip("M:\\ZIP\\test\\temp2.zip", "M:\\ZIP\\test\\temp", "zyh");}}压缩多个⽂件时,有两个⽅法(第⼀种没试):(1)预先把多个⽂件压缩成zip,然后调⽤enc.addAll(inZipFile, password);⽅法将多个zip⽂件加进来。
java数据库密码解密方法
在Java中,数据库密码解密的方法通常涉及使用安全的加密算法对存储的加密密码进行解密。
以下是一种常见的解密方法:1.使用加密算法对密码进行加密:在连接数据库之前,可以使用一种安全的加密算法(如AES或RSA)对密码进行加密,并将加密后的密码存储在配置文件或数据库中。
确保在此过程中,使用了安全的密钥管理和存储方法,以防止密码泄露。
2.在应用程序中使用解密算法解密密码:在应用程序中,您可以使用相应的解密算法以及正确的密钥来解密数据库密码。
以下是一种简单的示例:import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;public class DatabasePasswordDecryptor {private static final String ENCRYPTION_KEY ="YourEncryptionKey";/ / 替换为加密密钥public static String decrypt(String encryptedPassword)throws Excep tion{byte[] decodedKey = Base64.getDecoder().decode(ENCRYPTION_KEY);SecretKeySpec keySpec =new SecretKeySpec(decodedKey,"AES");Cipher cipher =Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, keySpec);byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(en cryptedPassword));return new String(decrypted);}public static void main(String[] args){try{String encryptedPassword ="YourEncryptedPassword";// 替换为加密密码String decryptedPassword =decrypt(encryptedPassword);System.out.println("Decrypted Password: "+ decryptedPasswo rd);}catch(Exception e){e.printStackTrace();}}}在这个例子中,需要替换ENCRYPTION_KEY和encryptedPassword为实际的加密密钥和加密后的密码。
RSA压缩加密解压缩解密
RSA压缩加密/解压缩解密import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.Key;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SecureRandom;import java.util.Properties;import java.util.UUID;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;import javax.crypto.Cipher;/*** 对文件压缩加密/解密解压缩对象类**/public class ZipEncrypt {private static PrivateKey privateKey;private static PublicKey publicKey;private static void directoryZip(ZipOutputStream out, File f, String base) throws Exception {// 如果传入的是目录if (f.isDirectory()) {File[] fl = f.listFiles();// 创建压缩的子目录out.putNextEntry(new ZipEntry(base + "/"));if (base.length() == 0) {base = "";} else {base = base + "/";}for (int i = 0; i < fl.length; i++) {directoryZip(out, fl[i], base + fl[i].getName());}} else {// 把压缩文件加入rar中out.putNextEntry(new ZipEntry(base));FileInputStream in = new FileInputStream(f);byte[] bb = new byte[2048];int aa = 0;while ((aa = in.read(bb)) != -1) {out.write(bb, 0, aa);}in.close();}}/*** 压缩文件* @param zos* @param file* @throws Exception*/private static void fileZip(ZipOutputStream zos, File file) throws Exception {if (file.isFile()) {zos.putNextEntry(new ZipEntry(file.getName()));FileInputStream fis = new FileInputStream(file);byte[] bb = new byte[2048];int aa = 0;while ((aa = fis.read(bb)) != -1) {zos.write(bb, 0, aa);}fis.close();System.out.println(file.getName());} else {directoryZip(zos, file, "");}}/*** 解压缩文件** @param zis* @param file* @throws Exception*/private static void fileUnZip(ZipInputStream zis, File file) throws Exception {ZipEntry zip = zis.getNextEntry();if (zip == null)return;String name = zip.getName();File f = new File(file.getAbsolutePath() + "/" + name);if (zip.isDirectory()) {f.mkdirs();fileUnZip(zis, file);} else {f.createNewFile();FileOutputStream fos = new FileOutputStream(f);byte b[] = new byte[2048];int aa = 0;while ((aa = zis.read(b)) != -1) {fos.write(b, 0, aa);}fos.close();fileUnZip(zis, file);}}/*** 对directory目录下的文件压缩,保存为指定的文件zipFile** @param directory* @param zipFile*/private static void zip(String directory, String zipFile) {try {ZipOutputStream zos = new ZipOutputStream(new FileOutputStream( zipFile));fileZip(zos, new File(directory));zos.close();} catch (Exception e) {e.printStackTrace();}}/*** 解压缩文件zipFile保存在directory目录下** @param directory* @param zipFile*/private static void unZip(String directory, String zipFile) {try {ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));File f = new File(directory);f.mkdirs();fileUnZip(zis, f);zis.close();} catch (Exception e) {e.printStackTrace();}}/*** 根据key的路径文件获得持久化成文件的key* <P>* 例子: RsaEncrypt.getKey("c:/systemkey/private.key");** @param keyPath* @return*/public static Key getKey(String keyPath) throws Exception {Key key = null;FileInputStream fis = new FileInputStream(keyPath);ObjectInputStream ofs = new ObjectInputStream(fis);key = (Key) ofs.readObject();return key;}/*** 把文件srcFile加密后存储为destFile** @param srcFile* @param destFile*/private static void encrypt(String srcFile, String destFile, Key privateKey) throws Exception {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, privateKey);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);byte[] b = new byte[53];while (fis.read(b) != -1) {fos.write(cipher.doFinal(b));}fos.close();fis.close();}/*** 把文件srcFile解密后存储为destFile** @param srcFile* @param destFile* @param privateKey* @throws Exception*/private static void decrypt(String srcFile, String destFile, Key privateKey)throws Exception {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);byte[] b = new byte[64];while (fis.read(b) != -1) {fos.write(cipher.doFinal(b));}fos.close();fis.close();}/*** 对目录srcFile下的所有文件目录进行先压缩后操作,然后保存为destfile** @param srcFile* 要操作的目录如c:/test/test* @param destfile* 压缩加密后存放的文件名如c:/加密压缩文件.zip* @param keyfile* 公钥存放地点*/public static void encryptZip(String srcFile, String destfile, String keyfile) throws Exception {SecureRandom sr = new SecureRandom();KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");kg.initialize(512, sr);//产生新密钥对KeyPair kp = kg.generateKeyPair();//获得私匙ZipEncrypt.privateKey = kp.getPrivate();//获得公钥ZipEncrypt.publicKey = kp.getPublic();File f = new File(keyfile);f.createNewFile();FileOutputStream fos = new FileOutputStream(f);ObjectOutputStream dos = new ObjectOutputStream(fos);dos.writeObject(ZipEncrypt.publicKey);File temp = new File(UUID.randomUUID().toString() + ".zip");temp.deleteOnExit();// 先压缩文件zip(srcFile, temp.getAbsolutePath());// 对文件加密encrypt(temp.getAbsolutePath(), destfile, privateKey);temp.delete();}/*** 对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下** @param srcfile* 要解密和解压缩的文件名如c:/目标.zip* @param destfile* 解压缩后的目录如c:/abc* @param publicKey* 公钥*/public static void decryptUnzip(String srcfile, String destfile,Key publicKey) throws Exception {// 先对文件解密File temp = new File(UUID.randomUUID().toString() + ".zip");temp.deleteOnExit();decrypt(srcfile, temp.getAbsolutePath(), publicKey);// 解压缩unZip(destfile, temp.getAbsolutePath());temp.delete();}public static void main(String args[]) throws Exception {File f = new File(".");Properties prop = new Properties(); ;FileInputStream fis = new FileInputStream("./conf.properties");prop.load(fis);//要压缩的目录String srcPath = prop.getProperty("SRC_PATH");//压缩后的存放文件String destZip = prop.getProperty("DEST_FILE");//压缩加密后的publickeyString keyfile = prop.getProperty("KEY_FILE");ZipEncrypt.encryptZip(srcPath, destZip,keyfile);/*解密ZipEncrypt.decryptUnzip("e:/comXXX/comxxxx.zip", "d:/comxxx", ZipEncrypt .getKey("e:/comXXX/public.key"));*/}}AES压缩加密/解压缩解密,网上一般用base64来对byte[]编码,其实不需要,指定AES/CBC/PKCS5Padding来指定加密解密时候位数不对的情况下,用pkcs5padding来附加位数,不过这个时候读解密的文件的时候,要多读16位的验证位就不会报异常import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.security.Key;import java.security.SecureRandom;import java.util.UUID;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;/*** 对文件加密/解密和压缩/解压缩对象类* @author 赵成明*/public class ZipEncrypt {private void directoryZip(ZipOutputStream out, File f, String base)throws Exception {// 如果传入的是目录if (f.isDirectory()) {File[] fl = f.listFiles();// 创建压缩的子目录out.putNextEntry(new ZipEntry(base + "/"));if (base.length() == 0) {base = "";} else {base = base + "/";}for (int i = 0; i < fl.length; i++) {directoryZip(out, fl[i], base + fl[i].getName());}} else {// 把压缩文件加入rar中out.putNextEntry(new ZipEntry(base));FileInputStream in = new FileInputStream(f);byte[] bb = new byte[2048];int aa = 0;while ((aa = in.read(bb)) != -1) {out.write(bb, 0, aa);}in.close();}}/*** 压缩文件* @param zos* @param file* @throws Exception*/private void fileZip(ZipOutputStream zos, File file)throws Exception {if (file.isFile()) {zos.putNextEntry(new ZipEntry(file.getName())); FileInputStream fis = new FileInputStream(file); byte[] bb = new byte[2048];int aa = 0;while ((aa = fis.read(bb)) != -1) {zos.write(bb, 0, aa);}fis.close();System.out.println(file.getName());} else {directoryZip(zos, file, "");}}/*** 解压缩文件** @param zis* @param file* @throws Exception*/private void fileUnZip(ZipInputStream zis, File file) throws Exception {ZipEntry zip = zis.getNextEntry();if (zip == null)return;String name = zip.getName();File f = new File(file.getAbsolutePath() + "/" + name);if (zip.isDirectory()) {f.mkdirs();fileUnZip(zis, file);} else {f.createNewFile();FileOutputStream fos = new FileOutputStream(f);byte b[] = new byte[2048];int aa = 0;while ((aa = zis.read(b)) != -1) {fos.write(b, 0, aa);}fos.close();fileUnZip(zis, file);}}/*** 对directory目录下的文件压缩,保存为指定的文件zipFile** @param directory* @param zipFile*/private void zip(String directory, String zipFile) {try {ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));fileZip(zos, new File(directory));zos.close();} catch (Exception e) {e.printStackTrace();}}/*** 解压缩文件zipFile保存在directory目录下** @param directory* @param zipFile*/private void unZip(String directory, String zipFile) {try {ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));File f = new File(directory);f.mkdirs();fileUnZip(zis, f);zis.close();} catch (Exception e) {e.printStackTrace();}}/*** 根据key的路径文件获得持久化成文件的key* <P>* 例子: RsaEncrypt.getKey("c:/systemkey/private.key");** @param keyPath* @return*/private Key getKey(String keyPath) throws Exception {FileInputStream fis = new FileInputStream(keyPath);byte[] b = new byte[16];fis.read(b);SecretKeySpec dks = new SecretKeySpec(b,"AES");fis.close();return dks;}/*** 把文件srcFile加密后存储为destFile** @param srcFile* @param destFile*/private void encrypt(String srcFile, String destFile, Key privateKey)throws Exception {SecureRandom sr = new SecureRandom();Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec spec=new IvParameterSpec(privateKey.getEncoded()); cipher.init(Cipher.ENCRYPT_MODE, privateKey,spec,sr);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);byte[] b = new byte[2048];while (fis.read(b) != -1) {fos.write(cipher.doFinal(b));}fos.close();fis.close();}/*** 把文件srcFile解密后存储为destFile** @param srcFile* @param destFile* @param privateKey* @throws Exception*/private void decrypt(String srcFile, String destFile, Key privateKey)throws Exception {SecureRandom sr = new SecureRandom();Cipher ciphers = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec spec=new IvParameterSpec(privateKey.getEncoded());ciphers.init(Cipher.DECRYPT_MODE,privateKey,spec,sr);FileInputStream fis = new FileInputStream(srcFile);FileOutputStream fos = new FileOutputStream(destFile);byte[] b = new byte[2064];while (fis.read(b) != -1) {fos.write(ciphers.doFinal(b));}fos.close();fis.close();}/*** 对目录srcFile下的所有文件目录进行先压缩后操作,然后保存为destfile ** @param srcFile* 要操作的目录如c:/test/test* @param destfile* 压缩加密后存放的文件名如c:/加密压缩文件.zip* @param keyfile* 公钥存放地点*/public void encryptZip(String srcFile, String destfile, String keyfile) throws Exception {SecureRandom sr = new SecureRandom();KeyGenerator kg = KeyGenerator.getInstance("AES");kg.init(128,sr);SecretKey key = kg.generateKey();File f = new File(keyfile);if (!f.getParentFile().exists())f.getParentFile().mkdirs();f.createNewFile();FileOutputStream fos = new FileOutputStream(f);fos.write(key.getEncoded());File temp = new File(UUID.randomUUID().toString() + ".zip");temp.deleteOnExit();// 先压缩文件zip(srcFile, temp.getAbsolutePath());// 对文件加密encrypt(temp.getAbsolutePath(), destfile, key);temp.delete();}/*** 对文件srcfile进行先解密后解压缩,然后解压缩到目录destfile下 ** @param srcfile* 要解密和解压缩的文件名如c:/目标.zip* @param destfile* 解压缩后的目录如c:/abc* @param publicKey* 公钥*/public void decryptUnzip(String srcfile, String destfile,String keyfile) throws Exception {// 先对文件解密File temp = new File(UUID.randomUUID().toString() + ".zip");temp.deleteOnExit();decrypt(srcfile, temp.getAbsolutePath(), this.getKey(keyfile));// 解压缩unZip(destfile, temp.getAbsolutePath());temp.delete();}public static void main(String args[]) throws Exception {long a = System.currentTimeMillis();new ZipEncrypt().encryptZip("e:/com","e:/comXXX/page.zip","e:/comXXX/public.key");System.out.println(System.currentTimeMillis()-a);a = System.currentTimeMillis();new ZipEncrypt().decryptUnzip("e:/comXXX/page.zip", "e:/comxxx", "e:/comXXX/public.key");System.out.println(System.currentTimeMillis()-a);}}2008-06-18 12:38package koal.project.xdxx.ra.admin.util;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.security.SecureRandom; import java.util.ArrayList;import java.util.Enumeration;import java.util.UUID;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;import javax.crypto.Cipher;import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec;import mon.util.Base64;public class ZipSecurityUtil {public ZipSecurityUtil() {super();}private static File[] toFiles(File[] srcFiles) { ArrayList files = new ArrayList();for (int i = 0; i < srcFiles.length; i++) {File file = srcFiles[i];if (!file.exists()) {System.out.println("warnning:the file you want tobackup is missing="+ file.getAbsolutePath());continue;}if (file.isDirectory()) {// 递归调用File[] dir = toFiles(file.listFiles());for (int j = 0; j < dir.length; j++) {File dirfile = dir[j];files.add(dirfile);}} else {files.add(file);}}File[] a = new File[files.size()];return (File[]) files.toArray(a);}private static File[] toFiles(String[] srcFiles) {File[] a = new File[srcFiles.length];for (int i = 0; i < srcFiles.length; i++) {a[i] = new File(srcFiles[i]);}return toFiles(a);}/**** @param file* @param preffixLen* 根目录长度,为0时使用绝对路径保存* @return*/public static String entryName(File file, int preffixLen) {String entryName = file.getPath();if (file.isDirectory())entryName = entryName.endsWith(File.separator) ? entryName: entryName + File.separator;entryName = entryName.replace(File.separatorChar, '/').substring(preffixLen);return entryName;}/*** 压缩文件** @param srcFiles:* 要被压缩的文件名* @param dstDir:* 压缩后的文件名* @param comment:* 文件注释* @param preffixLen:* 根目录长度,为0时使用绝对路径保存,大于0时,会对文件的绝对路径前减去该长度*/public static void zip(String[] strFiles, String dstFile, String comment,int preffixLen) throws IOException {if (strFiles.length == 0)return;File fileDst = new File(dstFile);File parentDir = fileDst.getParentFile();if (!parentDir.exists()) {parentDir.mkdirs();}if (fileDst.exists())fileDst.delete();fileDst.createNewFile();ZipOutputStream zos = new ZipOutputStream(new File OutputStream(fileDst)); zos.setMethod(ZipOutputStream.DEFLATED);if (comment != null) {zos.setComment(comment);}DataOutputStream dos = new DataOutputStream(zos);File[] srcFiles = toFiles(strFiles);for (int i = 0; i < srcFiles.length; i++) {String entryPath = entryName(srcFiles[i], preffixLen);zos.putNextEntry(new ZipEntry(entryPath));FileInputStream fis = new FileInputStream(srcFiles[i]);byte[] buff = new byte[8192];int len = 0;while (true) {len = fis.read(buff);if (len == -1 || len == 0)break;dos.write(buff, 0, len);}zos.closeEntry();fis.close();}dos.close();zos.close();}/*** 解压缩文件** @param srcFile:* 压缩文件名* @param dstDir:* 要解压到的目录* @param entryName:* 要解压哪个文件,如果为null则解压所有文件。
java enc解密方法
java enc解密方法在Java中,可以使用Java内置的加密和解密库来实现加密和解密操作。
以下是一个简单的示例,演示如何使用Java内置的加密和解密库进行加密和解密操作:```javaimport ;import ;import ;import ;public class EncryptionExample {public static void main(String[] args) throws Exception {// 原始字符串String original = "Hello, World!";// 加密密钥String key = "secretkey";// 加密操作Cipher cipher = ("AES/ECB/PKCS5Padding");SecretKeySpec secretKey = new SecretKeySpec((_8), "AES");(_MODE, secretKey);byte[] encrypted = ((_8));String encryptedString = ().encodeToString(encrypted);("加密后的字符串: " + encryptedString);// 解密操作(_MODE, secretKey);byte[] decrypted = (().decode(encryptedString));String decryptedString = new String(decrypted, _8);("解密后的字符串: " + decryptedString);}}```在这个示例中,我们使用AES算法进行加密和解密操作。
我们首先定义了一个原始字符串和加密密钥。
然后,我们使用Cipher类创建一个加密对象,并使用指定的算法和模式进行初始化。
Java中的文件压缩与解压缩方法
Java中的文件压缩与解压缩方法在日常的开发工作中,文件的压缩与解压缩是一个常见的需求。
Java作为一种广泛使用的编程语言,提供了丰富的类库和方法来实现这一功能。
本文将介绍Java中常用的文件压缩与解压缩方法,并探讨它们的优缺点以及适用场景。
一、文件压缩方法1. Zip压缩Zip是一种常见的文件压缩格式,Java提供了java.util.zip包来实现对Zip文件的压缩和解压缩操作。
使用Zip压缩文件可以将多个文件或文件夹打包成一个压缩文件,方便传输和存储。
在Java中,可以使用ZipOutputStream类来创建一个Zip文件,并使用ZipEntry类来表示Zip文件中的每个文件或文件夹。
下面是一个简单的示例代码:```javaimport java.io.*;import java.util.zip.*;public class ZipUtil {public static void zipFile(String sourceFilePath, String zipFilePath) {try {FileOutputStream fos = new FileOutputStream(zipFilePath);ZipOutputStream zos = new ZipOutputStream(fos);File file = new File(sourceFilePath);zipFile(file, file.getName(), zos);zos.close();fos.close();} catch (IOException e) {e.printStackTrace();}}private static void zipFile(File file, String fileName, ZipOutputStream zos) throws IOException {if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {zipFile(f, fileName + "/" + f.getName(), zos);}} else {FileInputStream fis = new FileInputStream(file);ZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {zos.write(buffer, 0, len);}fis.close();}}}```上述代码中,zipFile方法用于递归压缩文件夹中的所有文件和子文件夹。
Java解压zip文件
java解压zip文件(由于zip包使用Winra工具打的包,他的默认编码格式是gbk,所以在解压zip包中的中文文件明的文件的时候就会出现IllegalArguementException异常,解决方法就是在ZipInputStream 的getUTF8String()方法中加上如下代码 String s=newString(b,off,len,"gbk"); return s;编译后将ZipInputStream 的class文件覆盖jdk\jre\rt.jar中java.util.zip包中的ZipInputStream.class)try {// ZipInputStream zis = new ZipInputStream(new FileInputStream(// "Archive.zip"));ZipInputStream zis = new ZipInputStream(newFileInputStream("e.zip"));// ZipFile z=new ZipFile(Archive.zip);ZipEntry ze = null;while ((ze=zis.getNextEntry()) != null) {if (!ze.isDirectory()) {System.out.println(ze.getName());// File child = new File(ze.getName());String filename=ze.getName();int at=stIndexOf("/");System.out.println(at);if(at!=-1){String path=filename.substring(0, at);File pa=new File(path);pa.mkdirs();FileOutputStream outputStream = newFileOutputStream(pa+filename.substring(at));byte[] buffer = new byte[1024];int bytesRead = 0;while ((bytesRead = zis.read(buffer)) > 0) {outputStream.write(buffer, 0, bytesRead);}outputStream.flush();outputStream.close();}else{FileOutputStream outputStream = new FileOutputStream(filename); byte[] buffer = new byte[1024];int bytesRead = 0;while ((bytesRead = zis.read(buffer)) > 0) {outputStream.write(buffer, 0, bytesRead);}outputStream.flush();outputStream.close();}}}zis.close();} catch (Exception e) {e.printStackTrace();}。
java接收文件加密解密方法
java接收文件加密解密方法
在Java中接收加密文件并进行解密可以通过多种方式实现。
下面我将从多个角度介绍几种常见的方法:
1. 使用对称加密算法:
可以使用Java的javax.crypto包中的类来实现对称加密算法,如AES。
首先,接收加密文件后,可以使用FileInputStream 读取文件内容,然后使用Cipher类进行解密操作,最后使用FileOutputStream将解密后的内容写入新文件。
2. 使用非对称加密算法:
如果发送方使用了公钥加密文件,接收方可以使用私钥进行解密。
可以使用Java的java.security包中的类来实现非对称加密算法,如RSA。
首先,接收加密文件后,可以使用PrivateKey类进行解密操作,最后使用FileOutputStream将解密后的内容写入新文件。
3. 使用第三方库:
除了Java自带的加密算法外,也可以使用第三方库来简化加密解密操作,例如Bouncy Castle或者Apache Commons Crypto 等。
这些库提供了更多的加密选项和更简单的API,可以更容易地实现文件的加密和解密操作。
无论使用哪种方法,都需要注意文件的安全传输和存储,以及密钥的安全管理。
另外,要确保在解密文件时处理可能出现的异常情况,如文件损坏或者密码错误等。
希望这些信息能够帮助你实现在Java中接收文件并进行加密解密的操作。
如何在Java中进行文件压缩和解压缩操作
如何在Java中进行文件压缩和解压缩操作文件压缩和解压缩是程序开发中常见的操作,通过压缩可以减小文件的大小,节省存储空间,并且可以快速传输文件。
Java中提供了多种压缩和解压缩文件的方式,如ZipOutputStream和ZipInputStream等类。
本文将详细介绍在Java中进行文件压缩和解压缩的操作步骤和示例代码。
一、文件压缩文件压缩是将一个或多个文件打包成一个压缩文件,常见的压缩文件格式包括zip、tar、gz等。
在Java中,通常使用ZipOutputStream类实现文件压缩操作。
ZipOutputStream类是用于写入ZIP文件的输出流。
1.创建ZipOutputStream对象首先需要创建一个ZipOutputStream对象,用于写入ZIP文件。
可以通过FileOutputStream将ZipOutputStream链接到一个文件,然后就可以向文件中写入压缩数据。
```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```2.添加文件到压缩文件接下来需要将要压缩的文件添加到ZipOutputStream中。
可以通过ZipEntry对象表示压缩文件中的每个文件或目录,并使用putNextEntry方法将文件添加到压缩文件中。
```javaFile file1 = new File("file1.txt");ZipEntry entry1 = new ZipEntry(file1.getName());zos.putNextEntry(entry1);FileInputStream fis1 = new FileInputStream(file1);byte[] buffer = new byte[1024];int length;while ((length = fis1.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis1.close();```3.完成压缩完成文件的添加后,需要关闭ZipOutputStream,以确保压缩文件保存到磁盘。
java相关加密解密方法
java相关加密解密方法Java加密解密方法是保护数据安全的重要手段,本文将详细介绍几种常见的Java加密解密方法。
一、对称加密算法对称加密算法是一种使用相同的密钥进行加密和解密的算法。
这种加密方式简单高效,但存在密钥管理的问题,因为所有用户都必须知道密钥。
在Java中,常用的对称加密算法有DES、3DES、AES等。
1. DES:Data Encryption Standard,数据加密标准,是一种使用56位密钥的对称块密码算法。
在Java中,我们可以使用javax.crypto.Cipher类来实现DES 加密解密。
2. 3DES:Triple Data Encryption Algorithm,三重数据加密算法,是DES的增强版本,使用三个不同的56位密钥进行三次加密。
在Java中,我们同样可以使用Cipher类来实现3DES加密解密。
3. AES:Advanced Encryption Standard,高级加密标准,是一种使用128、192或256位密钥的对称块密码算法。
在Java中,我们可以使用Cipher类来实现AES加密解密。
二、非对称加密算法非对称加密算法是一种使用一对密钥(公钥和私钥)进行加密和解密的算法。
公钥可以公开给所有人,而私钥需要保密。
在Java中,常用的非对称加密算法有RSA、DSA等。
1. RSA:Rivest-Shamir-Adleman,一种基于大数因子分解难题的非对称加密算法。
在Java中,我们可以使用java.security.KeyPairGenerator类生成RSA密钥对,然后使用Cipher类进行RSA加密解密。
2. DSA:Digital Signature Algorithm,数字签名算法,是一种基于整数有限域离散对数难题的非对称加密算法。
在Java中,我们可以使用KeyPairGenerator类生成DSA密钥对,然后使用Signature类进行DSA签名和验证。
zipparameters使用_使用zip4j加密和解密文件和目录详解
zipparameters使⽤_使⽤zip4j加密和解密⽂件和⽬录详解闲话少说,直接看⼯具类:package com.ilucky.zip4j.util;import java.io.File;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;/*** @author IluckySi* @since 20150723*/public class Zip4jUtil {private String srcPath;private String dstPath;private String password = "123456";public String getSrcPath() {return srcPath;}public void setSrcPath(String srcPath) {this.srcPath = srcPath;}public String getDstPath() {return dstPath;}public void setDstPath(String dstPath) {this.dstPath = dstPath;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/*** 加密* ⽀持将某个⽂件或某个⽬录下所有的⽂件加密.* 1.某个⽂件:D:\\test\\src.zip.* 2某个⽬录:D:\\test\\src* @return boolean*/public boolean encrypt() {try {if(!new File(srcPath).exists()) {System.out.println("源路径不存在 "+srcPath);return false;}ZipParameters parameters = new ZipParameters();parameters.setEncryptFiles(true);parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword(password.toCharArray());File srcFile = new File(srcPath);ZipFile destFile = new ZipFile(dstPath);if(srcFile.isDirectory()) {destFile.addFolder(srcFile, parameters);} else {destFile.addFile(srcFile, parameters);}System.out.println("成功加密⽂件");return true;} catch (Exception e) {System.out.println("加密⽂件发⽣异常:"+e);return false;}}/*** 解密* ⽀持将某个加密⽂件解压缩到某个指定⽬录下⾯. * @return boolean*/public boolean decrypt() {try {if(!new File(srcPath).exists()) {System.out.println("源路径不存在 "+srcPath); return false;}ZipFile srcFile = new ZipFile(srcPath); srcFile.setFileNameCharset("GBK");srcFile.setPassword(password.toCharArray()); srcFile.extractAll(dstPath);System.out.println("成功解密⽂件");return true;} catch (ZipException e) {System.out.println("解密⽂件发⽣异常:"+e); return false;}}}然后看测试类:package com.ilucky.zip4j.util;/*** @author IluckySi* @since 20150723*/public class MainTest {public static void main(String[] args) {//加密.Zip4jUtil zip4jUtil = new Zip4jUtil();zip4jUtil.setSrcPath("D:\\test\\src.zip");zip4jUtil.setDstPath("D:\\test\\dst.zip");zip4jUtil.setPassword("123");zip4jUtil.encrypt();//解密.zip4jUtil.setSrcPath("D:\\test\\dst.zip"); zip4jUtil.setDstPath("D:\\test\\");zip4jUtil.setPassword("123");//zip4jUtil.decrypt();}}最后看pom⽂件:net.lingala.zip4jzip4j1.3.2。