热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享AndroidAES加密工具类分享

1、aes加密工具类java不支持pkcs7padding,只支持pkcs5padding。我们知道加密算法由算法+模式+填充组成,下一篇介绍ios

1、aes加密工具类

上述就是android开发分享Android AES加密工具类分享的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—编程笔记

java不支持pkcs7padding,只支持pkcs5padding。我们知道加密算法由算法+模式+填充组成,下一篇介绍ios和android通用的aes加密,本篇文章使用pkcs5padding加密方式。

  package com.example.aesdemo;    import java.io.unsupportedencodingexception;  import javax.crypto.cipher;  import javax.crypto.spec.secretkeyspec;     ///** aes对称加密解密类 **/  public class aeshelper {      // /** 算法/模式/填充 **/   private static final string ciphermode = "aes/ecb/pkcs5padding";      ///** 创建密钥 **/   private static secretkeyspec createkey(string password) {   byte[] data = null;   if (password == null) {    password = "";   }   stringbuffer sb = new stringbuffer(32);   sb.append(password);   while (sb.length() <32) {    sb.append("0");   }   if (sb.length() > 32) {    sb.setlength(32);   }      try {    data = sb.tostring().getbytes("utf-8");   } catch (unsupportedencodingexception e) {    e.printstacktrace();   }   return new secretkeyspec(data, "aes");   }      // /** 加密字节数据 **/   public static byte[] encrypt(byte[] content, string password) {   try {    secretkeyspec key = createkey(password);    system.out.println(key);    cipher cipher = cipher.getinstance(ciphermode);    cipher.init(cipher.encrypt_mode, key);    byte[] result = cipher.dofinal(content);    return result;   } catch (exception e) {    e.printstacktrace();   }   return null;   }      ///** 加密(结果为16进制字符串) **/   public static string encrypt(string content, string password) {   byte[] data = null;   try {    data = content.getbytes("utf-8");   } catch (exception e) {    e.printstacktrace();   }   data = encrypt(data, password);   string result = byte2hex(data);   return result;   }      // /** 解密字节数组 **/   public static byte[] decrypt(byte[] content, string password) {   try {    secretkeyspec key = createkey(password);    cipher cipher = cipher.getinstance(ciphermode);    cipher.init(cipher.decrypt_mode, key);    byte[] result = cipher.dofinal(content);    return result;   } catch (exception e) {    e.printstacktrace();   }   return null;   }      ///** 解密16进制的字符串为字符串 **/   public static string decrypt(string content, string password) {   byte[] data = null;   try {    data = hex2byte(content);   } catch (exception e) {    e.printstacktrace();   }   data = decrypt(data, password);   if (data == null)    return null;   string result = null;   try {    result = new string(data, "utf-8");   } catch (unsupportedencodingexception e) {    e.printstacktrace();   }   return result;   }      // /** 字节数组转成16进制字符串 **/   public static string byte2hex(byte[] b) { // 一个字节的数,   stringbuffer sb = new stringbuffer(b.length * 2);   string tmp = "";   for (int n = 0; n 

2、使用

新建android工程

  package com.example.aesdemo;    import android.os.bundle;  import android.app.activity;  import android.view.menu;  import android.util.log;     public class mainactivity extends activity {  		   protected void oncreate(bundle savedinstancestate) {   		super.oncreate(savedinstancestate);   		setcontentview(r.layout.activity_main);  	  	 string masterpassword = "a";   	 string originaltext = "于";     	 try {   	  string encryptingcode = aeshelper.encrypt(originaltext,masterpassword);   //	  system.out.println("加密结果为 " + encryptingcode);   	  log.i("加密结果为 ",encryptingcode);   	  string decryptingcode = aeshelper.decrypt(encryptingcode,masterpassword);   //	  system.out.println("解密结果为 " + decryptingcode);   	  log.i("解密结果",decryptingcode);   	  } catch (exception e) {   	  // todo auto-generated catch block   	  e.printstacktrace();   	 } 	  	}    	@override  	public boolean oncreateoptionsmenu(menu menu) {  		// inflate the menu; this adds items to the action bar if it is present.  		getmenuinflater().inflate(r.menu.main, menu);  		return true;  	}  }

3、打印结果

  09-19 10:41:05.467: i/加密结果为(707): e55c24701f6380478e1940addfd08d22  09-19 10:41:05.467: i/解密结果(707): 于  


推荐阅读
  • andr ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 本文介绍了如何通过配置 Android Studio 和 Gradle 来显著提高构建性能,涵盖内存分配优化、并行构建和性能分析等实用技巧。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
author-avatar
fuchen201101
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有