zoukankan      html  css  js  c++  java
  • 【JAVA】AES加密

    import java.security.SecureRandom;  
    
    import javax.crypto.Cipher;  
    import javax.crypto.KeyGenerator;  
    import javax.crypto.SecretKey;  
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;  
    
    import android.util.Log;
    
    public class AES {
        public static final String TAG = "AESUtils";
    
        public static String encrypt(String seed, String clearText) {
            Log.d(TAG, "加密前的seed=" + seed + ",内容为:" + clearText);
            byte[] result = null;
            try {
                byte[] rawkey = getRawKey(seed.getBytes());
                result = encrypt(rawkey, clearText.getBytes());
            } catch (Exception e) {
                e.printStackTrace();
            }
            String content = toHex(result);
             Log.d(TAG, "加密后的内容为:" + content);
            return content;
    
        }
    
        public static String decrypt(String seed, String encrypted) {
            Log.d(TAG, "解密前的seed=" + seed + ",内容为:" + encrypted);
            byte[] rawKey;
            try {
                rawKey = getRawKey(seed.getBytes());
                byte[] enc = toByte(encrypted);
                byte[] result = decrypt(rawKey, enc);
                String coentn = new String(result);
                Log.d(TAG, "解密后的内容为:" + coentn);
                return coentn;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
    
        }
    
        private static byte[] getRawKey(byte[] seed) throws Exception {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
            sr.setSeed(seed);
            kgen.init(128, sr);
            SecretKey sKey = kgen.generateKey();
            byte[] raw = sKey.getEncoded();
    
            return raw;
        }
    
        private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    //        Cipher cipher = Cipher.getInstance("AES");
             Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(
                    new byte[cipher.getBlockSize()]));
            byte[] encrypted = cipher.doFinal(clear);
            return encrypted;
        }
    
        private static byte[] decrypt(byte[] raw, byte[] encrypted)
                throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    //        Cipher cipher = Cipher.getInstance("AES");
             Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(
                    new byte[cipher.getBlockSize()]));
            byte[] decrypted = cipher.doFinal(encrypted);
            return decrypted;
        }
    
        public static String toHex(String txt) {
            return toHex(txt.getBytes());
        }
    
        public static String fromHex(String hex) {
            return new String(toByte(hex));
        }
    
        public static byte[] toByte(String hexString) {
            int len = hexString.length() / 2;
            byte[] result = new byte[len];
            for (int i = 0; i < len; i++)
                result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
                        16).byteValue();
            return result;
        }
    
        public static String toHex(byte[] buf) {
            if (buf == null)
                return "";
            StringBuffer result = new StringBuffer(2 * buf.length);
            for (int i = 0; i < buf.length; i++) {
                appendHex(result, buf[i]);
            }
            return result.toString();
        }
    
        private static void appendHex(StringBuffer sb, byte b) {
            final String HEX = "0123456789ABCDEF";
            sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
        }
    
    }
  • 相关阅读:
    AirtestIDE基本功能(二)
    AirtestIDE基本功能(一)
    Pycharm Debug功能详解
    AirtestIDE环境安装
    leetcode-338. 比特位计数
    leetcode-401. 二进制手表
    leetcode-392. 判断子序列
    leetcode-155. 最小栈
    leetcode-111. 二叉树的最小深度
    leetcode-110. 平衡二叉树
  • 原文地址:https://www.cnblogs.com/robotpaul/p/10460005.html
Copyright © 2011-2022 走看看