Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android AES加密工具類(實測兼容所有版本,靠譜)

android AES加密工具類(實測兼容所有版本,靠譜)

編輯:關於Android編程

import android.annotation.SuppressLint;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * 
 * 
 * Author:sunger
 */
public class AESUtils {

	public static String encrypt(String seed, String cleartext)
			throws Exception {

		byte[] rawKey = getRawKey(seed.getBytes());

		byte[] result = encrypt(rawKey, cleartext.getBytes());

		return toHex(result);

	}

	public static String decrypt(String seed, String encrypted)
			throws Exception {

		byte[] rawKey = getRawKey(seed.getBytes());

		byte[] enc = toByte(encrypted);

		byte[] result = decrypt(rawKey, enc);

		return new String(result);

	}

	@SuppressLint("TrulyRandom")
	private static byte[] getRawKey(byte[] seed) throws Exception {

		KeyGenerator kgen = KeyGenerator.getInstance("AES");

		SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");

		sr.setSeed(seed);

		kgen.init(128, sr); // 192 and 256 bits may not be available

		SecretKey skey = kgen.generateKey();

		byte[] raw = skey.getEncoded();

		return raw;

	}

	private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {

		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

		Cipher cipher = Cipher.getInstance("AES");

		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(
				new byte[cipher.getBlockSize()]));

		byte[] encrypted = cipher.doFinal(clear);

		return encrypted;

	}

	private static byte[] decrypt(byte[] raw, byte[] encrypted)
			throws Exception {

		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

		Cipher cipher = Cipher.getInstance("AES");

		cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(
				new byte[cipher.getBlockSize()]));

		byte[] decrypted = cipher.doFinal(encrypted);

		return decrypted;

	}

	private static byte[] toByte(String hexString) {

		int len = hexString.length() / 2;

		byte[] result = new byte[len];

		for (int i = 0; i < len; i++)

			result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
					16).byteValue();

		return result;

	}

	private static String toHex(byte[] buf) {

		if (buf == null)

			return "";

		StringBuffer result = new StringBuffer(2 * buf.length);

		for (int i = 0; i < buf.length; i++) {

			appendHex(result, buf[i]);

		}

		return result.toString();

	}

	private final static String HEX = "0123456789ABCDEF";

	private static void appendHex(StringBuffer sb, byte b) {

		sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));

	}

}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved