将密码放入grails错误

时间:2016-02-23 16:38:10

标签: grails passwords zip grails-plugin grails-controller

因为我可以在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文件的情况下保留了错误的单词。

1 个答案:

答案 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的更多信息。