暗号化後のバイト配列が16進数だとわからずにStringにして、ファイル出力しててはまった。
そもそも、ファイルに文字化けした暗号文が保存された時点で対策を打つべきだった。
文字化けしてる時点で、非可逆になることは想定できたはず。
*Java暗号・復号プログラム
Blowfish方式の暗号・復号サンプルを示す。
import javax.crypto.spec.*;
import java.security.*;
import java.io.*;
import org.apache.commons.codec.binary.Hex;
public class Blowfish {
/**
* 暗号化するメソッドです。
* @param key 鍵です
* @param text 暗号化したい文字列です
*/
public static String encrypt(String key, String text)
throws IllegalBlockSizeException,InvalidKeyException,NoSuchAlgorithmException,
UnsupportedEncodingException,BadPaddingException,NoSuchPaddingException
{
SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.ENCRYPT_MODE, sksSpec);
byte[] encrypted = cipher.doFinal(text.getBytes());
return new String(Hex.encodeHex(encrypted));
}
/**
* 複合化するメソッドです。
* @param key 鍵です
* @param text 複合化したい文字列です
*/
public static String decrypt(String key, String text)
throws IllegalBlockSizeException,InvalidKeyException,NoSuchAlgorithmException,
UnsupportedEncodingException,BadPaddingException,NoSuchPaddingException
{
byte[] encrypted = null;
try {
encrypted=Hex.decodeHex(text.toCharArray());
} catch(Exception e){
e.printStackTrace();
}
SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(Cipher.DECRYPT_MODE, sksSpec);
byte[] decrypted = cipher.doFinal(encrypted);
return new String(decrypted);
}
}
-参考URL
--http://pinoki.la.coocan.jp/wiki/?cmd=read&page=Java%2F%B0%C5%B9%E6%B2%BD%2FBlowfish%CA%FD%BC%B0
最終更新:2009年04月02日 19:15