// Path: mtools/src/main/java/com/mtools/core/plugin/security/Coder.java
// public abstract class Coder {
//     public static final String KEY_SHA = "SHA";
//     public static final String KEY_MD5 = "MD5";
//  
//     /**
//      * MAC算法可选以下多种算法
//      * 
//      * <pre>
//      * HmacMD5 
//      * HmacSHA1 
//      * HmacSHA256 
//      * HmacSHA384 
//      * HmacSHA512
//      * </pre>
//      */
//     public static final String KEY_MAC = "HmacMD5";
//  
//     /**
//      * BASE64解密
//      * 
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static byte[] decryptBASE64(String key) throws Exception {
//         return (new BASE64Decoder()).decodeBuffer(key);
//     }
//  
//     /**
//      * BASE64加密
//      * 
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static String encryptBASE64(byte[] key) throws Exception {
//         return (new BASE64Encoder()).encodeBuffer(key);
//     }
//  
//     /**
//      * MD5加密
//      * 
//      * @param data
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptMD5(byte[] data) throws Exception {
//  
//         MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
//         md5.update(data);
//  
//         return md5.digest();
//  
//     }
//  
//     /**
//      * SHA加密
//      * 
//      * @param data
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptSHA(byte[] data) throws Exception {
//  
//         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
//         sha.update(data);
//  
//         return sha.digest();
//  
//     }
//  
//     /**
//      * 初始化HMAC密钥
//      * 
//      * @return
//      * @throws Exception
//      */
//     public static String initMacKey() throws Exception {
//         KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
//  
//         SecretKey secretKey = keyGenerator.generateKey();
//         return encryptBASE64(secretKey.getEncoded());
//     }
//  
//     /**
//      * HMAC加密
//      * 
//      * @param data
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
//  
//         SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
//         Mac mac = Mac.getInstance(secretKey.getAlgorithm());
//         mac.init(secretKey);
//  
//         return mac.doFinal(data);
//  
//     }
// }


import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import java.math.BigInteger;
import org.junit.Test;
import com.mtools.core.plugin.security.Coder;
package com.ztools.security;




 
/**
 * 
 * @author 梁栋
 * @version 1.0
 * @since 1.0
 */
public class CoderTest {
 
    @Test
    public void test() throws Exception {
        String inputStr = "简单加密";
        System.err.println("原文:\n" + inputStr);
 
        byte[] inputData = inputStr.getBytes();
        String code = Coder.encryptBASE64(inputData);
 
        System.err.println("BASE64加密后:\n" + code);
 
        byte[] output = Coder.decryptBASE64(code);
 
        String outputStr = new String(output);
 
        System.err.println("BASE64解密后:\n" + outputStr);
 
        // 验证BASE64加密解密一致性
        assertEquals(inputStr, outputStr);
 
        // 验证MD5对于同一内容加密是否一致
        assertArrayEquals(Coder.encryptMD5(inputData), Coder
                .encryptMD5(inputData));
 
        // 验证SHA对于同一内容加密是否一致
        assertArrayEquals(Coder.encryptSHA(inputData), Coder
                .encryptSHA(inputData));
 
        String key = Coder.initMacKey();
        System.err.println("Mac密钥:\n" + key);
 
        // 验证HMAC对于同一内容，同一密钥加密是否一致
        assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC(
                inputData, key));
 
        BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));
        System.err.println("MD5:\n" + md5.toString(16));
 
// Path: mtools/src/main/java/com/mtools/core/plugin/security/Coder.java
// public abstract class Coder {
//     public static final String KEY_SHA = "SHA";
//     public static final String KEY_MD5 = "MD5";
//  
//     /**
//      * MAC算法可选以下多种算法
//      * 
//      * <pre>
//      * HmacMD5 
//      * HmacSHA1 
//      * HmacSHA256 
//      * HmacSHA384 
//      * HmacSHA512
//      * </pre>
//      */
//     public static final String KEY_MAC = "HmacMD5";
//  
//     /**
//      * BASE64解密
//      * 
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static byte[] decryptBASE64(String key) throws Exception {
//         return (new BASE64Decoder()).decodeBuffer(key);
//     }
//  
//     /**
//      * BASE64加密
//      * 
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static String encryptBASE64(byte[] key) throws Exception {
//         return (new BASE64Encoder()).encodeBuffer(key);
//     }
//  
//     /**
//      * MD5加密
//      * 
//      * @param data
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptMD5(byte[] data) throws Exception {
//  
//         MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
//         md5.update(data);
//  
//         return md5.digest();
//  
//     }
//  
//     /**
//      * SHA加密
//      * 
//      * @param data
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptSHA(byte[] data) throws Exception {
//  
//         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
//         sha.update(data);
//  
//         return sha.digest();
//  
//     }
//  
//     /**
//      * 初始化HMAC密钥
//      * 
//      * @return
//      * @throws Exception
//      */
//     public static String initMacKey() throws Exception {
//         KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);
//  
//         SecretKey secretKey = keyGenerator.generateKey();
//         return encryptBASE64(secretKey.getEncoded());
//     }
//  
//     /**
//      * HMAC加密
//      * 
//      * @param data
//      * @param key
//      * @return
//      * @throws Exception
//      */
//     public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
//  
//         SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
//         Mac mac = Mac.getInstance(secretKey.getAlgorithm());
//         mac.init(secretKey);
//  
//         return mac.doFinal(data);
//  
//     }
// }


// Path: mtools/src/test/java/com/ztools/security/CoderTest.java
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import java.math.BigInteger;
import org.junit.Test;
import com.mtools.core.plugin.security.Coder;

package com.ztools.security;




 
/**
 * 
 * @author 梁栋
 * @version 1.0
 * @since 1.0
 */
public class CoderTest {
 
    @Test
    public void test() throws Exception {
        String inputStr = "简单加密";
        System.err.println("原文:\n" + inputStr);
 
        byte[] inputData = inputStr.getBytes();
        String code = Coder.encryptBASE64(inputData);
 
        System.err.println("BASE64加密后:\n" + code);
 
        byte[] output = Coder.decryptBASE64(code);
 
        String outputStr = new String(output);
 
        System.err.println("BASE64解密后:\n" + outputStr);
 
        // 验证BASE64加密解密一致性
        assertEquals(inputStr, outputStr);
 
        // 验证MD5对于同一内容加密是否一致
        assertArrayEquals(Coder.encryptMD5(inputData), Coder
                .encryptMD5(inputData));
 
        // 验证SHA对于同一内容加密是否一致
        assertArrayEquals(Coder.encryptSHA(inputData), Coder
                .encryptSHA(inputData));
 
        String key = Coder.initMacKey();
        System.err.println("Mac密钥:\n" + key);
 
        // 验证HMAC对于同一内容，同一密钥加密是否一致
        assertArrayEquals(Coder.encryptHMAC(inputData, key), Coder.encryptHMAC(
                inputData, key));
 
        BigInteger md5 = new BigInteger(Coder.encryptMD5(inputData));
        System.err.println("MD5:\n" + md5.toString(16));
 
        BigInteger sha = new BigInteger(Coder.encryptSHA(inputData));