热门标签 | 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): 于  


推荐阅读
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 变量间相关性分析
    本文探讨了如何通过统计方法评估两个变量之间的关系强度,重点介绍了皮尔森相关系数的计算及其应用。除了数学公式外,文章还提供了Python编程实例,展示如何利用实际数据集(如泰坦尼克号乘客数据)进行相关性检验。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • OpenCV中的霍夫圆检测技术解析
    本文详细介绍了如何使用OpenCV库中的HoughCircles函数实现霍夫圆检测,并提供了具体的代码示例及参数解释。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • TCP协议中的可靠传输机制分析
    本文深入探讨了TCP协议如何通过滑动窗口和超时重传来确保数据传输的可靠性,同时介绍了流量控制和拥塞控制的基本原理及其在实际网络通信中的应用。 ... [详细]
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社区 版权所有