JavaはBase 64、MD 5、MAC、HMAC暗号化を実現
20467 ワード
それらの基本的な暗号化はまだあまり熟練していないので、いくつかをまとめて、Base 64、MD 5、MAC、HMACの暗号化をサポートして、長い話をして、私たちはすべて自分で理解するのが好きで、コードを見ましょう!
採用した出力UTF-8のフォーマット...
次はテストクラスと入力コマンドです.
次はコンソール出力です.
これはいくつかの簡単な暗号化テストBASE 64暗号化後:6 L+Z 5 piv 5 LiA 5 Lqb 566 A 5 Y 2 V 55 qE 5 Yqg 5 a+G 5 rWL 6 K+V
BASE 64復号後:MD 5:76757 e 30 d 128 e 82 b 14488 b 115794 d 959 SHA:6 f 7 a fslor 1 oev 1 k 7 k 40 um 57 cscuqkjtnHMAC:782313 e 944 a 28 a 55 fc 20507 e 50 a 9 d 470
採用した出力UTF-8のフォーマット...
1 package visec;
2 import java.security.MessageDigest;
3 import javax.crypto.KeyGenerator;
4 import javax.crypto.Mac;
5 import javax.crypto.SecretKey;
6 import javax.crypto.spec.SecretKeySpec;
7
8 import Decoder.BASE64Decoder;
9 import Decoder.BASE64Encoder;
10 /**
11 *
12 * @author Visec·Dana
13 * @version 1.0
14 * @since 1.0
15 */
16 public abstract class Coder {
17 public static final String KEY_SHA = "SHA";
18 public static final String KEY_MD5 = "MD5";
19
20 /**
21 * MAC
22 * <pre>
23 * HmacMD5
24 * HmacSHA1
25 * HmacSHA256
26 * HmacSHA384
27 * HmacSHA512
28 * </pre>
29 */
30 public static final String KEY_MAC = "HmacMD5";
31
32 /**
33 * BASE64
34 * @param key
35 * @return
36 * @throws Exception
37 */
38 public static byte[] decryptBASE64(String key) throws Exception {
39 return (new BASE64Decoder()).decodeBuffer(key);
40 }
41
42 /**
43 * BASE64
44 * @param key
45 * @return
46 * @throws Exception
47 */
48 public static String encryptBASE64(byte[] key) throws Exception {
49 return (new BASE64Encoder()).encodeBuffer(key);
50 }
51 /**
52 * MD5
53 * @param data
54 * @return
55 * @throws Exception
56 */
57 public static byte[] encryptMD5(byte[] data) throws Exception {
58
59 MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
60 md5.update(data);
61 return md5.digest();
62
63 }
64 /**
65 * SHA
66 * @param data
67 * @return
68 * @throws Exception
69 */
70 public static byte[] encryptSHA(byte[] data) throws Exception {
71 MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
72 sha.update(data);
73 return sha.digest();
74
75 }
76 /**
77 * HMAC
78 * @return
79 * @throws Exception
80 */
81 public static String initMacKey() throws Exception {
82 KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
83 SecretKey secretKey = keyGenerator.generateKey();
84 return encryptBASE64(secretKey.getEncoded());
85 }
86 /**
87 * MAC
88 * @param data
89 * @param key
90 * @return
91 * @throws Exception
92 */
93 public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
94 SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
95 Mac mac = Mac.getInstance(secretKey.getAlgorithm());
96 mac.init(secretKey);
97 return mac.doFinal(data);
98
99 }
100 }
次はテストクラスと入力コマンドです.
1 package visec;
2
3 import java.math.BigInteger;
4
5 /**
6 *
7 * @author Visec·Dana
8 * @version 1.0
9 * @since 1.0
10 */
11 public class CoderTest {
12 public static void main(String[] args) throws Exception {
13 CoderTest.test();
14 }
15
16 public static void test() throws Exception {
17 String inputStr = " ";
18 System.err.println(" :" + inputStr);
19
20 byte[] inputData = inputStr.getBytes();
21 String code = Coder.encryptBASE64(inputData);
22
23 System.err.println("BASE64 :" + code);
24
25 byte[] output = Coder.decryptBASE64(code);
26
27 String outputStr = new String(output);
28
29 System.err.println("BASE64 :" + outputStr);
30
31 // Junit4[ ...]
32 /*// BASE64
33 assertEquals(inputStr, outputStr);
34
35 // MD5
36 assertArrayEquals(Coder.encryptMD5(inputData), Coder
37 .encryptMD5(inputData));
38
39 // SHA
40 assertArrayEquals(Coder.encryptSHA(inputData), Coder
41 .encryptSHA(inputData));
42
43 String key = Coder.initMacKey();
44 System.err.println("Mac :/n" + key);
45
46 // HMAC ,
47 assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC(
48 inputData, key));
49 */
50 BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));
51 System.err.println("MD5:" + md5.toString(16));
52
53 BigInteger sha = new BigInteger(Coder.encryptSHA(inputData));
54 System.err.println("SHA:" + sha.toString(32));
55
56 BigInteger mac = new BigInteger(Coder.encryptHMAC(inputData, inputStr));
57 System.err.println("HMAC:" + mac.toString(16));
58 }
59 }
次はコンソール出力です.
これはいくつかの簡単な暗号化テストBASE 64暗号化後:6 L+Z 5 piv 5 LiA 5 Lqb 566 A 5 Y 2 V 55 qE 5 Yqg 5 a+G 5 rWL 6 K+V
BASE 64復号後:MD 5:76757 e 30 d 128 e 82 b 14488 b 115794 d 959 SHA:6 f 7 a fslor 1 oev 1 k 7 k 40 um 57 cscuqkjtnHMAC:782313 e 944 a 28 a 55 fc 20507 e 50 a 9 d 470