Android加密工具类,Android AES加密工具类分享

1、AES加密工具类

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 < b.length; n++) {

// 整数转成十六进制表示

tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

if (tmp.length() == 1) {

sb.append("0");

}

sb.append(tmp);

}

return sb.toString().toUpperCase(); // 转成大写

}

// /** 将hex字符串转换成字节数组 **/

private static byte[] hex2byte(String inputString) {

if (inputString == null || inputString.length() < 2) {

return new byte[0];

}

inputString = inputString.toLowerCase();

int l = inputString.length() / 2;

byte[] result = new byte[l];

for (int i = 0; i < l; ++i) {

String tmp = inputString.substring(2 * i, 2 * i + 2);

result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);

}

return result;

}

}

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): 于

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值