因为我可以在zip文件grails上输入密码
package zip
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
class SampleZipController {
def index() { }
def downloadSampleZip() {
response.setContentType('APPLICATION/OCTET-STREAM')
response.setHeader('Content-Disposition', 'Attachment;Filename="example.zip"')
ZipOutputStream zip = new ZipOutputStream(response.outputStream);
def file1Entry = new ZipEntry('first_file.txt');
zip.putNextEntry(file1Entry);
zip.write("This is the content of the first file".bytes);
def file2Entry = new ZipEntry('second_file.txt');
zip.putNextEntry(file2Entry);
zip.write("This is the content of the second file".bytes);
zip.setPassword("password");
zip.close();
}
}
问题是我放了setPassword属性并且没有创建任何zip文件的情况下保留了错误的单词。
答案 0 :(得分:0)
好的,这是这笔交易。 Java SDK不为zip文件提供密码保护。 ZipOutputStream.setPassword()
不存在,也没有其他任何设置密码的方法。
您可以使用第三方库代替。这是一个Groovy脚本,演示如何使用Winzipaes密码保护ZIP文件:
@Grab('de.idyl:winzipaes:1.0.1')
import de.idyl.winzipaes.AesZipFileEncrypter
import de.idyl.winzipaes.impl.AESEncrypterBC
def outputStream = new FileOutputStream('test.zip') /* Create an OutputStream */
def encrypter = new AesZipFileEncrypter(outputStream, new AESEncrypterBC())
def password = 'password'
encrypter.add('first_file.txt', new ByteArrayInputStream('This is the content of the first file'.bytes), password)
encrypter.add('second_file.txt', new ByteArrayInputStream('This is the content of the second file'.bytes), password)
encrypter.close()
正如您所看到的,API与您使用的API类似。请记住,这是一个没有 Grails的Groovy脚本,因此请确保适当添加Winzipaes依赖项(不要使用@Grab)。
注意:加密算法是AES256,并非所有ZIP客户端都支持。例如,在Mac OSX上,我必须安装7-zip来解密文件;内置的ZIP工具不起作用。
您可以阅读有关密码保护ZIP文件here的更多信息。