JavaによるDESの暗号化・復号化ユーティリティ


今日は、暗号化・復号化に関するユーティリティを残しておきたいと思います。作業ログ的なもので。

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;
	}
}

関連記事