您的位置:首页 > 移动开发 > Android开发

android 数据加密AES

2017-07-14 11:00 351 查看
AES是目前对称加密中最流行算法之一。随着大数据越来越重要,信息安全随之人们开始关注起来。废话不多说。讲一讲AES加密。

public static byte[] encrypt(String content, String password) {  

        try {             

                KeyGenerator kgen = KeyGenerator.getInstance("AES");  //
创建AES的Key生产者

                kgen.init(128, new SecureRandom(password.getBytes()));  //在安全性要求比较高的场合,应当使用
//SecureRandom

                SecretKey secretKey = kgen.generateKey();  //生成一个密钥

                byte[] enCodeFormat = secretKey.getEncoded();  //
返回编码格式的密钥

                SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  //
转换为AES专用密钥

                Cipher cipher = Cipher.getInstance("AES");// 创建密码器  

                byte[] byteContent = content.getBytes("utf-8");  

                cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化加密模式

                byte[] result = cipher.doFinal(byteContent);  //加密

                return result; 

        } catch (NoSuchAlgorithmException e) {  

                e.printStackTrace();  

        } catch (NoSuchPaddingException e) {  

                e.printStackTrace();  

        } catch (InvalidKeyException e) {  

                e.printStackTrace();  

        } catch (UnsupportedEncodingException e) {  

                e.printStackTrace();  

        } catch (IllegalBlockSizeException e) {  

                e.printStackTrace();  

        } catch (BadPaddingException e) {  

                e.printStackTrace();  

        }  

        return null;  

}  

下面是解密的过程基本都差不多

public static byte[] decrypt(byte[] content, String password) {  

        try {  

                 KeyGenerator kgen = KeyGenerator.getInstance("AES");  

                 kgen.init(128, new SecureRandom(password.getBytes()));  

                 SecretKey secretKey = kgen.generateKey();  

                 byte[] enCodeFormat = secretKey.getEncoded();  

                 SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");              

                 Cipher cipher = Cipher.getInstance("AES");// 创建密码器  

                cipher.init(Cipher.DECRYPT_MODE, key);// 初始化  

                byte[] result = cipher.doFinal(content);  

                return result; // 加密  

        } catch (NoSuchAlgorithmException e) {  

                e.printStackTrace();  

        } catch (NoSuchPaddingException e) {  

                e.printStackTrace();  

        } catch (InvalidKeyException e) {  

                e.printStackTrace();  

        } catch (IllegalBlockSizeException e) {  

                e.printStackTrace();  

        } catch (BadPaddingException e) {  

                e.printStackTrace();  

        }  

        return null;  



主要是种子一定是一样的。才能正确的加解密。而且如果是用字节转换为字符串形式加解密的话,会报异常。这里就要用到二进制转换为16进制的,
然后间接转换为2进制的解密。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: