加密解密 AES

/**
 * AES加密解密
 */
public class AesUtils {
          /** 
         * 加密--把加密后的byte数组先进行二进制转16进制在进行base64编码 
         * @param sSrc 
         * @param sKey 
         * @return 
         * @throws Exception 
         */  
        public static String encrypt(String sSrc, String sKey) throws Exception {  
            if (sKey == null) {  
                throw new IllegalArgumentException("Argument sKey is null.");  
            }  
            if (sKey.length() != 16) {  
                throw new IllegalArgumentException(  
                        "Argument sKey'length is not 16.");  
            }  
            byte[] raw = sKey.getBytes("ASCII");  
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  

            Cipher cipher = Cipher.getInstance("AES");  
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);  

            byte[] encrypted = cipher.doFinal(sSrc.getBytes("UTF-8"));  
            String tempStr = parseByte2HexStr(encrypted);  

            Base64Encoder encoder = new Base64Encoder();  
            return encoder.encode(tempStr.getBytes("UTF-8"));  
        }  

        /** 
         *解密--先 进行base64解码,在进行16进制转为2进制然后再解码 
         * @param sSrc 
         * @param sKey 
         * @return 
         * @throws Exception 
         */  
        public static String decrypt(String sSrc, String sKey) throws Exception {  

            if (sKey == null) {  
                throw new IllegalArgumentException("499");  
            }  
            if (sKey.length() != 16) {  
                throw new IllegalArgumentException("498");  
            }  

            byte[] raw = sKey.getBytes("ASCII");  
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  

            Cipher cipher = Cipher.getInstance("AES");  
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);  

            Base64Encoder encoder = new Base64Encoder();  
            byte[] encrypted1 = encoder.decode(sSrc);  

            String tempStr = new String(encrypted1, "utf-8");  
            encrypted1 = parseHexStr2Byte(tempStr);  
            byte[] original = cipher.doFinal(encrypted1);  
            String originalString = new String(original, "utf-8");  
            return originalString;  
        }  

        /** 
         * 将二进制转换成16进制 
         *  
         * @param buf 
         * @return 
         */  
        public static String parseByte2HexStr(byte buf[]) {  
            StringBuffer sb = new StringBuffer();  
            for (int i = 0; i < buf.length; i++) {  
                String hex = Integer.toHexString(buf[i] & 0xFF);  
                if (hex.length() == 1) {  
                    hex = '0' + hex;  
                }  
                sb.append(hex.toUpperCase());  
            }  
            return sb.toString();  
        }  

        /** 
         * 将16进制转换为二进制 
         *  
         * @param hexStr 
         * @return 
         */  
        public static byte[] parseHexStr2Byte(String hexStr) {  
            if (hexStr.length() < 1)  
                return null;  
            byte[] result = new byte[hexStr.length() / 2];  
            for (int i = 0; i < hexStr.length() / 2; i++) {  
                int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);  
                int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),  
                        16);  
                result[i] = (byte) (high * 16 + low);  
            }  
            return result;  
        } 
        public static void main(String[] args) throws Exception {
            String cKey = "1c0bpi6nhvfn0000";
            // 需要加密的字串
            String cSrc = new Date().getTime()+"";
            // 加密
            long lStart = System.currentTimeMillis();
            //
            String enString = encrypt(cSrc, cKey);
            System.out.println("加密后的字串是:" + enString);
            long lUseTime = System.currentTimeMillis() - lStart;
            System.out.println("加密耗时:" + lUseTime + "毫秒");
            // 解密
            lStart = System.currentTimeMillis();
            String DeString = decrypt(enString, cKey);
            System.out.println("解密后的字串是:" + DeString);
            lUseTime = System.currentTimeMillis() - lStart;
            System.out.println("解密耗时:" + lUseTime + "毫秒");
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值