今日は、暗号化・復号化に関するユーティリティを残しておきたいと思います。作業ログ的なもので。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | package org.fukata.jc_common.utils; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 暗号化に関するユーティリティ * @author tatsuya * */ public class CryptUtils { private static BASE64Encoder base64Encoder = new BASE64Encoder(); private static BASE64Decoder base64Decoder = new BASE64Decoder(); private CryptUtils() { } /** * 暗号化する。 * @param decrypt 暗号元の文字列 * @return * @throws NoSuchAlgorithmException * @throws NoSuchPaddingException * @throws InvalidKeyException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws InvalidKeySpecException */ public static String encrypt(String decrypt) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidKeySpecException { // 暗号化 Cipher c = Cipher.getInstance("DES"); c.init(Cipher.ENCRYPT_MODE, generateSecretKey()); byte input[] = decrypt.getBytes(); byte encrypted[] = c.doFinal(input); return base64Encoder.encode(encrypted); } /** * 復号化する。 * @param encrypt 暗号化された文字列 * @return * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws NoSuchAlgorithmException * @throws NoSuchPaddingException * @throws InvalidAlgorithmParameterException * @throws InvalidKeyException * @throws InvalidKeySpecException * @throws IOException */ public static String decrypt(String encrypt) throws IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, InvalidKeySpecException, IOException { Cipher c = Cipher.getInstance("DES"); c.init(Cipher.DECRYPT_MODE, generateSecretKey()); byte output[] = c.doFinal(base64Decoder.decodeBuffer(encrypt)); return new String(output); } /** * 鍵を生成する。 * @return * @throws InvalidKeyException * @throws NoSuchAlgorithmException * @throws InvalidKeySpecException */ private static SecretKey generateSecretKey() throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException { DESKeySpec dk = new DESKeySpec(Config.ENCRYPT_KEY.getBytes()); SecretKeyFactory kf = SecretKeyFactory.getInstance("DES"); SecretKey sk = kf.generateSecret(dk); return sk; } } |