GroovyでRijndael(Rijn.dll)を使用した暗号化・復号化
暗号化ソフトのうちの1つにファイル暗号化ソフト「ED」がある。
名前が微妙なのだが・・・
バッチ化したいだが、スクリーンセーバーが動作してる場合やロックがかかってると、
どうも待ちになってしまうようだ。
なので、EDでも使っているRijndael(Rijn.dll)を使用した暗号化・復号化するGroovyスクリプトを
作ってみた。
結論としては、EDとの互換性はない。orz
EDで暗号化したものを、Rijndael(Rijn.dll)で復号化はできないし、
逆に、Rijndael(Rijn.dll)で暗号化したものを、EDで復号化もできない。
1. DLLのダウンロード
ファイル暗号化DLL「ラインドール(rijn.dll)」からダウンロードする。
3. JNAの設定
JNAを使用するための設定
1)ダウンロード
https://jna.dev.java.net/servlets/ProjectDocumentList から 「3.2.7」 をダウンロードする
2)CLASSPATHの設定
以下をクラスパスに設定する。
- C:\usr\lib\sun.com\jna\3.2.7\jna.jar
- C:\usr\lib\sun.com\jna\3.2.7\platform.jar
Groovyスクリプト
import com.sun.jna.Library import com.sun.jna.Native public interface RijnLibrary extends Library { /* rijn.dll */ RijnLibrary INSTANCE = (RijnLibrary)Native.loadLibrary("rijn", RijnLibrary.class); /*int EncryptFile(char* SourceFileName, char* DestFileName, char* password) */ Integer EncryptFile(String sourceFileName, String destFileName, String passWord) /*int DecryptFile(char* SourceFileName, char* DestFileName,char* password) */ Integer DecryptFile(String sourceFileName, String destFileName, String passWord) } class RijnException extends Exception{ RijnException(){ super() } RijnException(String msg){ super(msg) } } class RijnEncryptFileException extends RijnException{ RijnEncryptFileException(){ super() } RijnEncryptFileException(String msg){ super(msg) } } class RijnDecryptFileException extends RijnException{ RijnDecryptFileException(){ super() } RijnDecryptFileException(String msg){ super(msg) } } GROOVY_VERSION = org.codehaus.groovy.runtime.InvokerHelper.getVersion() if (GROOVY_VERSION <= "1.7.0") { throw new RijnException("Groovy 1.7.0以上が必要"); } if (args.size() != 4 ) { throw new ArrayIndexOutOfBoundsException("USAGE:groovy ED.groovy ENC|DEC SourceFileName DestFileName PassWord\n") } mode = args[0] srcFileName = args[1] destFileName = args[2] passWord = args[3] if (mode == "ENC"){ ret = RijnLibrary.INSTANCE.EncryptFile(srcFileName, destFileName, passWord) if (ret != 0) { switch (ret) { case -1: msg = "暗号化元ファイルオープン時エラー ($ret)" case -2: msg = "暗号化先ファイル作成時エラー ($ret)" case -3: msg = "暗号化時エラー ($ret)" default: msg = "unkown ($ret)" } throw new RijnEncryptFileException(msg) } println "正常終了:暗号化" } else if (mode == "DEC") { ret = RijnLibrary.INSTANCE.DecryptFile(srcFileName, destFileName, passWord) if (ret != 0) { switch (ret) { case -1: msg = "復号元ファイルオープン時エラー ($ret)" case -2: msg = "復号先ファイル作成時エラー ($ret)" case -3: msg = "復号時エラー ($ret)" default: msg = "unkown ($ret)" } throw new RijnEncryptFileException(msg) } println "正常終了:復号化" }else { throw new ArrayIndexOutOfBoundsException("USAGE:groovy ED.groovy ENC|DEC SourceFileName DestFileName PassWord\n") }
使い方
groovy ED.groovy ENC 暗号化するファイルの絶対パス 暗号化したファイルの保存先の絶対パス パスワード
groovy ED.groovy DEC 復号化するファイルの絶対パス 復号化したファイルの保存先の絶対パス パスワード
JavaでもDESアルゴリズムやその他のアルゴリズムで暗号化・復号化する方法はあるから、
EDとの互換性がないのなら、Rijndael(Rijn.dll)のDLLを使う必要はないんだけどね。
ファイルの絶対パスを指定するだけでいいのは楽かも。
実行環境
- OS:Windows XP
- Groovy Version: 1.7.5
- JVM: 1.6.0_12
GroovyでRijndael(Rijn.dll)を使用した暗号化・復号化
Groovyでカンマで区切られたデータ(CSV)を処理する
Groovyで文字列を単語に分ける.groovy
Groovyでファイルを行単位で処理する
Groovyでファイルを開く
Groovyでグラフを作成する 4)日付表示を“日-月”から“月/日”に変更する 設定方法のバリエーション編
Groovyでグラフを作成する 4)日付表示を“日-月”から“月/日”に変更する リベンジ編
Groovyでグラフを作成する 4)日付表示を“日-月”から“月/日”に変更する 失敗編
Groovyでグラフを作成する 3)日本語は使えるか?
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
Groovyイン・アクション
posted with amazlet