您的位置:首页 > 移动开发 > Android开发

Android AES加密算法及其实现

2013-09-28 12:42 357 查看
这个例子是来自http://www.tutorials-android.com/learn/How_to_encrypt_and_decrypt_strings.rhtml

package com.vzo.eightpartycall.activity;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Window;

import android.widget.TextView;

import com.vzo.eightpartycall.R;

public class SimpleCrypto extends Activity {

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 BinstrToStr(new String(result));

return new String(result);

}

private static byte[] getRawKey(byte[] seed) throws Exception {

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

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

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);

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);

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

return decrypted;

}

public static String toHex(String txt) {

return toHex(txt.getBytes());

}

public static String fromHex(String hex) {

return new String(toByte(hex));

}

public 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;

}

public 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));

}

/** Called when the activity is first created. */

private TextView tv1, tv2, tv3, tv4;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

tv1 = (TextView) findViewById(R.id.textView1);

tv2 = (TextView) findViewById(R.id.textView2);

tv3 = (TextView) findViewById(R.id.textView3);

tv4 = (TextView) findViewById(R.id.textView4);

String masterPassword = "newbft12345stock";

tv1.setText("密钥密码: "+masterPassword);

String originalText = "18611111111";

tv2.setText("加密号码: "+originalText);

byte[] text = new byte[]{'1','8','6','1','1','1','1','1','1','1'};

// byte[] password = new byte[]{'n','e','w','b','f','t','1','2','3','4','5','s','t','o','c','k'};

byte[] password = masterPassword.getBytes();

try {

String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);

// System.out.println("加密结果为 " + encryptingCode);

Log.i("lanjianlong,加密结果为 ",encryptingCode);

tv3.setText("加密结果: "+encryptingCode);

String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);

System.out.println("解密结果为 " + decryptingCode);

Log.i("lanjianlong,解密结果",decryptingCode);

tv4.setText("解密结果: "+decryptingCode);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private static String BinstrToStr(String binStr) {

String[] tempStr=StrToStrArray(binStr);

char[] tempChar=new char[tempStr.length];

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

tempChar[i]=BinstrToChar(tempStr[i]);

}

return String.valueOf(tempChar);

}

private static String[] StrToStrArray(String str) {

return str.split(" ");

}

private static char BinstrToChar(String binStr){

int[] temp=BinstrToIntArray(binStr);

int sum=0;

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

sum +=temp[temp.length-1-i]<<i;

}

return (char)sum;

}

private static int[] BinstrToIntArray(String binStr) {

char[] temp=binStr.toCharArray();

int[] result=new int[temp.length];

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

result[i]=temp[i]-48;

}

return result;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: