加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

【Android工具类】DES加密时代的终结者——AES加密算法

发布时间:2020-12-15 03:23:36 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 package com.example.androiddemo; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import jav

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

    package com.example.androiddemo;  
      
    import java.security.SecureRandom;  
      
    import javax.crypto.Cipher;  
    import javax.crypto.KeyGenerator;  
    import javax.crypto.SecretKey;  
    import javax.crypto.spec.SecretKeySpec;  
      
    import android.annotation.SuppressLint;  
      
    /** 
     *  
     * @ClassName: com.example.androiddemo.AESUtil 
     * @Description: AES加密解密工具类 
     * @author zhaokaiqiang 
     * @date 2014-11-15 上午10:08:44 
     *  
     */  
    @SuppressLint("TrulyRandom")  
    public class AESUtil {  
      
        private final static String HEX = "0123456789ABCDEF";  
        private final static int JELLY_BEAN_4_2 = 17;  
      
        /** 
         * 加密 
         *  
         * @param key 
         *            密钥 
         * @param src 
         *            加密文本 
         * @return 
         * @throws Exception 
         */  
        public static String encrypt(String key,String src) throws Exception {  
            byte[] rawKey = getRawKey(key.getBytes());  
            byte[] result = encrypt(rawKey,src.getBytes());  
            return toHex(result);  
        }  
      
        /** 
         * 解密 
         *  
         * @param key 
         *            密钥 
         * @param encrypted 
         *            待揭秘文本 
         * @return 
         * @throws Exception 
         */  
        public static String decrypt(String key,String encrypted) throws Exception {  
            byte[] rawKey = getRawKey(key.getBytes());  
            byte[] enc = toByte(encrypted);  
            byte[] result = decrypt(rawKey,enc);  
            return new String(result);  
        }  
      
        /** 
         * 获取256位的加密密钥 
         *  
         * @param seed 
         * @return 
         * @throws Exception 
         */  
        @SuppressLint("TrulyRandom")  
        private static byte[] getRawKey(byte[] seed) throws Exception {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            SecureRandom sr = null;  
            // 在4.2以上版本中,SecureRandom获取方式发生了改变  
            if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {  
                sr = SecureRandom.getInstance("SHA1PRNG","Crypto");  
            } else {  
                sr = SecureRandom.getInstance("SHA1PRNG");  
            }  
            sr.setSeed(seed);  
            // 256 bits or 128 bits,192bits  
            kgen.init(256,sr);  
            SecretKey skey = kgen.generateKey();  
            byte[] raw = skey.getEncoded();  
            return raw;  
        }  
      
        /** 
         * 真正的加密过程 
         *  
         * @param key 
         * @param src 
         * @return 
         * @throws Exception 
         */  
        private static byte[] encrypt(byte[] key,byte[] src) throws Exception {  
            SecretKeySpec skeySpec = new SecretKeySpec(key,"AES");  
            Cipher cipher = Cipher.getInstance("AES");  
            cipher.init(Cipher.ENCRYPT_MODE,skeySpec);  
            byte[] encrypted = cipher.doFinal(src);  
            return encrypted;  
        }  
      
        /** 
         * 真正的解密过程 
         *  
         * @param key 
         * @param encrypted 
         * @return 
         * @throws Exception 
         */  
        private static byte[] decrypt(byte[] key,byte[] encrypted)  
                throws Exception {  
            SecretKeySpec skeySpec = new SecretKeySpec(key,"AES");  
            Cipher cipher = Cipher.getInstance("AES");  
            cipher.init(Cipher.DECRYPT_MODE,skeySpec);  
            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) {  
            sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));  
        }  
    }  

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读