android开发 文件数据的AES-128方式加密解密

本文介绍了在Android开发中如何使用AES-128进行文件的加密和解密操作。作者通过序列化和反序列化技术,结合Xstream库将加密内容写入和从文件中读取。文章提到了尝试AES-256但无法在Android Studio中实现的问题,并给出了16字节的初始化向量和32字节的密钥示例,以及字符串加密解密的处理流程。

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

半年前写下的草稿了,首次发表,很多不足,以后要慢慢改进

目标:加密内容-->写到文件中,解密文件-->读取文件内容

加密解密方式:AES-128(尝试过使用AES-256,发现在Androidstudio中实现不了,有大神可以实现的希望多多指教)

解析xml文件:这里我使用了第三方Xstream库(这个比较方便使用,数据不多时可以使用AS本身的方法)来序列化写入,反序列化写出


例子:byte[ ]  _iv 长度为16,具体字节可自定义,byte[ ] _key 长度为32,具体字节自定义。(如:byte[ ] _iv={0x11,0x32,(byte) 0xFC,..........})。

            这里是传入字符串进行加密,返回字节以便序列化写入文件;

                传入字符串进行解密,返回字符串再反序列化写出;可根据具体需要来修改。

private static final byte[] _iv = {。。。。。};
private static final byte[] _key = {。。。。。};
//解密
public static String Decrypt(String sSrc){
    SecretKeySpec skeySpec = new SecretKeySpec(_key, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec iv = new IvParameterSpec(_iv);
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
    byte[] original = cipher.doFinal(HexUtils.hexStringToByte(sSrc));
    return new String(original);
}
//加密
public static byte[] EncryptToByte(String sSrc) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(_key, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec iv = new IvParameterSpec(_iv);
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    return cipher.doFinal(sSrc.getBytes());
}

/**反序列化
 * @param inputStream 输入流
 * @param cls  需要反序列化的类
 * @param charSetName 编码格式字符串
 * @return
 * @throws IOException
 */
public static <T> T Deserialize(InputStream inputStream, Class<T> cls, 
String charSetName) throws IOException
{
   Log.d("devinfo", "PMCCheckUtil-->Deserialize01" );
   XStream xstream = new XStream(new DomDriver(charSetName));
   // xstream.autodetectAnnotations(true);
   xstream.processAnnotations(cls);
   @SuppressWarnings("unchecked")
   T retobj = (T) (xstream.fromXML(inputStream));
   return retobj;
}

/**序列化
 * @param /ms  输出流
 * @param obj 需要序列化的类
 * @param charSetName 编码格式字符串
 * @throws IOException
 */
public static void Serialize(OutputStream outputStream, Object obj, 
String charSetName) throws IOException
{
   XStream xstream = new XStream(new DomDriver(charSetName));
   xstream.processAnnotations(obj.getClass());
   xstream.toXML(obj, outputStream);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值