java常用加密方式2

BASE64、MD5、SHA、HMAC
完整类:

package Example1208;
import java.security.MessageDigest;  
import javax.crypto.KeyGenerator;  
import javax.crypto.Mac;  
 import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
import sun.misc.BASE64Decoder;  
import sun.misc.BASE64Encoder;  
    /** 
     * 基础加密组件 
     *  
     * @author 梁栋 
     * @version 1.0 
     * @since 1.0 
     */  
    public abstract class JiaMi {  
        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);  

        }  

    }  

测试类:

package Example1208;
import static org.junit.Assert.*;

import java.math.BigInteger;

import org.junit.Test;

/**
 * 
 * @version 1.0
 * @since 1.0
 */
public class JiaMi2 {

    @Test
    public void test() throws Exception {
        String inputStr = "简单加密";
        System.err.println("原文:\n" + inputStr);

        byte[] inputData = inputStr.getBytes();
        String code = JiaMi.encryptBASE64(inputData);

        System.err.println("BASE64加密后:\n" + code);

        byte[] output = JiaMi.decryptBASE64(code);

        String outputStr = new String(output);

        System.err.println("BASE64解密后:\n" + outputStr);

        // 验证BASE64加密解密一致性
        assertEquals(inputStr, outputStr);

        // 验证MD5对于同一内容加密是否一致
        assertArrayEquals(JiaMi.encryptMD5(inputData), JiaMi
                .encryptMD5(inputData));

        // 验证SHA对于同一内容加密是否一致
        assertArrayEquals(JiaMi.encryptSHA(inputData), JiaMi
                .encryptSHA(inputData));

        String key = JiaMi.initMacKey();
        System.err.println("Mac密钥:\n" + key);

        // 验证HMAC对于同一内容,同一密钥加密是否一致
        assertArrayEquals(JiaMi.encryptHMAC(inputData, key), JiaMi.encryptHMAC(
                inputData, key));

        BigInteger md5 = new BigInteger(JiaMi.encryptMD5(inputData));
        System.err.println("MD5:\n" + md5.toString(16));

        BigInteger sha = new BigInteger(JiaMi.encryptSHA(inputData));
        System.err.println("SHA:\n" + sha.toString(32));

        BigInteger mac = new BigInteger(JiaMi.encryptHMAC(inputData, inputStr));
        System.err.println("HMAC:\n" + mac.toString(16));
    }
}

我说不清,点击这里查看原址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值