Groovyでzipファイルを暗号化してみる

2022-05-20Groovy,Java

はじめに

社内で外部に資料をメール送信する際には、 必ず以下のようなルールがあります。
ここではこのルール自体の是非については触れません!!

  1. ファイルをzip圧縮する
  2. zipファイルを暗号化する
  3. zipファイルはお客様が Windows PCを利用しているため、 Windows 上の一般的なツールで展開できるようにする

毎回手作業でやっていたので、 Groovyスクリプト化してみました。
以下がスクリプトの一部。
ここでは、 Zipユーティリティークラス というライブラリを利用させていただきました。 これは便利!ありがとう!

機能

  1. 利用環境Windows を想定しています。
    • 少し変更すればLinuxやmacOS上でももちろん動作します。
  2. 圧縮対象となるディレクトリ"デスクトップ" 上の "src/" ディレクトリに配置します。
  3. 圧縮済みファイル"デスクトップ" 上に "encrypt-xxxx.zip" というファイル名で作成されます。
  4. パスワード実行日時(YYYYMMDD) となります。
    • こちらも少し変更すれば別のルールに変更可能です。

zipTheAttachedFiles.groovy

  • Grab 機能を使って、実行時にZipユーティリティライブラリを自動的にダウンロードしてきます。
@Grapes(
    @Grab(group='com.astamuse', module='hishidama-hmzip', version='1.6')
)

import jp.hishidama.zip.ZipCloak
import java.io.File
import java.util.*
import java.text.*

// LinuxやmacOSでは、こちらのデスクトップ該当パスを適切に変更すれば動作します
def desktop = System.getProperty("user.home") + "/デスクトップ"
def srcdir = new File("${desktop}/src")
def distdir = desktop

if (!srcdir.exists()) {
    srcdir.mkdir()
}

print "${srcdir.name}フォルダにファイルを入れてください。(準備ができたらEnterを押してください)"
System.in.read()

def dateStr = new SimpleDateFormat("yyyyMMdd").format(new GregorianCalendar().time)
def password = "${dateStr}"
def zipfile = new File("${distdir}/${srcdir.name}.zip")
ant = new AntBuilder()

ant.delete(
    file:"${distdir}/${srcdir.name}.zip"
)
ant.zip(
    destfile:"${zipfile.path}"
    ,basedir:"${srcdir}"
    ,update:"true"
){
}

def encZipfile = new File("""${desktop}/encrypt-${zipfile.name}""")
ant.delete(
    file:"${encZipfile.path}"
)
ZipCloak zip = new ZipCloak(zipfile)
zip.encrypt(encZipfile, password.getBytes("MS932"))
ant.delete(
    file:"${distdir}/${srcdir.name}.zip"
)

println "※※処理完了!※※"

実行例

groovy zipTheAttachedFiles.groovy

2022-05-20Groovy,Java