android 安全之——文件加密AES加密算法、

本文介绍了AES加密算法,它是目前广泛使用的加密标准,尚未被有效破解。AES支持128、192、256比特的密钥和数据块长度。加密过程包括密钥扩展、初始轮、重复轮和最终轮等步骤。在Android中实现AES加密,需要依赖如bouncycastle这样的第三方库。文章提供了Android AES加密和解密文件的示例代码,包括密钥生成、初始化向量、加密解密流程等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


AES加密算法是目前比较流行加密方式,目前还没有针对AES有效的破解方式,比较靠谱。AES又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

AES加密数据块和密钥长度可以是128比特、192比特、256比特中的任意一个。

AES加密有很多轮的重复和变换。大致步骤如下:

1、密钥扩展(KeyExpansion),
2、初始轮(Initial Round),
3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,
4、最终轮(Final Round),最终轮没有MixColumns。


jdk中算法的支持:

 密钥长度:128位
工作模式:ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128
填充方式:Nopadding/PKCS5Padding/ISO10126Padding/


这里需要注意一个问题,在创建Cipher对象是需要一个第三方Provider来提供算法实现,在标准JDK中只是规定了JCE(JCE (Java Cryptography Extension) 是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。)接口,但是内部实现需要自己或者第三方提供,因此我们这里使用bouncycastle的开源的JCE实现包,下载地址:http://bouncycastle.org/latest_releases.html,我使用的是bcprov-jdk15on-150.jar  jdk1.6。

下面是Android中一种实现方式:

[java]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. public class AESKeyModel {  
  2.   
  3.     public static final String KEY_ALGORITHM = "AES";    
  4.     private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";    
  5.     private String srcFile="",destionFile="";  
  6.     /**  
  7.      * 初始化密钥  
  8.      *   
  9.      * @return byte[] 密钥   
  10.      * @throws Exception  
  11.      */    
  12.     public byte[] initSecretKey() {    
  13.         //返回生成指定算法的秘密密钥的 KeyGenerator 对象    
  14.         KeyGenerator kg = null;    
  15.         try {    
  16.             kg = KeyGenerator.getInstance(KEY_ALGORITHM);    
  17.         } catch (NoSuchAlgorithmException e) {    
  18.             e.printStackTrace();    
  19.             return new byte[0];    
  20.         }    
  21.         //初始化此密钥生成器,使其具有确定的密钥大小    
  22.         //AES 要求密钥长度为 128    
  23.         kg.init(128);    
  24.         //生成一个密钥    
  25.         SecretKey  secretKey = kg.generateKey();    
  26.         return secretKey.getEncoded();    
  27.     }    
  28.       
  29.     public void setDestionFile(String destionFile) {  
  30.         this.destionFile = destionFile;  
  31.     }  
  32.   
  33.     public void setSrcFile(String srcFile) {  
  34.         this.srcFile = srcFile;  
  35.     }  
  36.     /**  
  37.      * 转换密钥  
  38.      *   
  39.      * @param key   二进制密钥  
  40.      * @return 密钥  
  41.      */    
  42.     private static Key toKey(byte[] key){    
  43.         //生成密钥    
  44.         return new SecretKeySpec(key, KEY_ALGORITHM);    
  45.     }    
  46.     &nbs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值