java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar
⇔
StreamRelay.bat
暗号化コマンドとしてのStreamRelay.jar
圧縮と同じように、暗号化処理もjavax.crypto.CipherInputStream/javax.crypto.CipherOutputStreamクラスになっているので、StreamRelay.jarがあれば、ファイルの暗号化もできるという事
ファイル暗号化なので、入出力はファイルとなる
つまり、入力ファイル→(暗号化された)出力ファイルなので、
「local」の入力ソース(実体)にファイル、「remote」の出力ソース(実体)に暗号化ファイルとすればいい
つまり、
- アルゴリズム : AES
- モード : CBC
- パディング : PKCS5Padding
- 鍵 : abcdefgh
- 鍵の攪拌 : SHA512 (実際の鍵は「abcdefgh」のSHA512の先頭128bit)
- Cipherクラスのinit()に渡す初期値 : 0410e448928a9e2d81d6551a90642074019d
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt -RemoteOutputFile a.txt.aes -RemoteCipherAlgorithm AES/CBC/PKCS5Padding -RemoteCipherPassword abcdefgh -RemoteCipherPasswordHashAlgorithm SHA-512 -RemoteAlgorithmParameters 0410e448928a9e2d81d6551a90642074019d
とすると、上記の条件で a.txt→(暗号化)→a.txt.aes となる
復号コマンドの代替
復号コマンドは、(暗号化された)入力ファイル→(復号された)出力ファイルなので、
「local」の入力ソース(実体)に暗号化ファイル、「remote」の出力ソース(実体)に結果ファイルとすればいい
上記の暗号化されたファイルの復号は
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt.aes -RemoteOutputFile a.txt.out -LocalCipherAlgorithm AES/CBC/PKCS5Padding -LocalCipherPassword abcdefgh -LocalCipherPasswordHashAlgorithm SHA-512 -LocalAlgorithmParameters 0410e448928a9e2d81d6551a90642074019d
暗号アルゴリズムの一覧
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -ListCipher
鍵を攪拌するハッシュ関数の一覧
- SHA-384
- SHA-224
- SHA-256
- MD2
- SHA
- SHA-512
- MD5
- MD4
-[Local|Remote]CipherAlgorithm に渡す文字列
"暗号アルゴリズム名"/"モード"/"パディング"
Cipherクラスを作成する時の引数と一緒
モードの一覧とか、パディングの一覧は、
JavaTM 暗号化拡張機能 (JCE)リファレンスガイドを参照かな。
-[Local|Remote]AlgorithmParameters
Cipherクラスのinit()に渡すパラメータです
nullとなるようなアルゴリズムとかモードとか選ぶと楽かも(この指定をしなくてもよい)
例えば
- RC4
- AES/ECB/PKCS5Padding (ECBモードがポイント)
暗号通信
zebedee のような vpn の代替としての StreamRelay.jar
StreamRelay.jar で入力ダイアログで暗号鍵を与える
StreamRelay.jar で入力ダイアログで暗号鍵を与える
Rabbit(ver8.4以降)
ver8.4 以降でRabbitが使えるようになった。