Android AES加密算法及事实上现

昨天老大叫我看看android加密算法。于是网上找了找,找到了AES加密算法。(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了非常多,可是基本都是j2se平台的,android平台不一定支持,可是AES算法Android是自带了包的,从官方的http://developer.android.com/reference/javax/crypto/Cipher.html能够看到。

AES加密算法是什么?大家能够自己去google,专家级程序猿写好包,project人员会用即可了。

这个样例事实上是来自http://www.tutorials-android.com/learn/How_to_encrypt_and_decrypt_strings.rhtml

src文件夹主文件:

package com.qq;
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;

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 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. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String masterPassword = "a";
        String originalText = "0123456789";
        byte[] text = new byte[]{‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘};
        byte[] password = new byte[]{‘a‘};
        try {
    		String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);
//    		System.out.println("加密结果为 " + encryptingCode);
    		Log.i("加密结果为 ",encryptingCode);
    		String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);
    		System.out.println("解密结果为 " + decryptingCode);
    		Log.i("解密结果",decryptingCode);
    	   } catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    }
    }
}

布局文件main.xml和配置文件AndroidManifest.xml默认就好了。最后结果在Log里面看,利用adb logcat > d:\1.txt定位到D盘的1.txt文件,然后用记事本打开就,查找”加密结果为“就能够看到了:

执行结果(从log日志中看到的):

I/加密结果为 (  190): BFB77D8F1E1EE9D5E252926A12659DE8

I/解密结果(  190): 0123456789

时间: 2024-12-15 21:16:25

Android AES加密算法及事实上现的相关文章

Android AES加密算法及其实现

找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了很多,但是基本都是j2se平台的,android平台不一定支持,但是AES算法Android是自带了包的,从官方的http://developer.android.com/reference/javax/crypto/Cipher.html可以看到.) AES加密算法是什么?大家可以自己去google,专家级程序员写好包,工程人员会用就行了. 这个例子其

Android AES加密算法,现在实际上

昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了非常多.可是基本都是j2se平台的.android平台不一定支持,可是AES算法Android是自带了包的,从官方的http://developer.android.com/reference/javax/crypto/Cipher.html能够看到. ) AES加密算法是什么?大家能够自己去goo

PHP android ios相互兼容的AES加密算法

APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ANDROID IOS,相互加解密正常的AES加密算法代码. PHP的AES加密算法: [codesyntax lang=”php”] <?php class MCrypt { private $hex_iv = '00000000000000000000000000000000'; # conve

iOS,Android,.NET通用AES加密算法

原文:iOS,Android,.NET通用AES加密算法 这两天为移动App开发API,结果实现加密验证时碰到一大坑.这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果,Android则可以,后来使用了通用的AES256加密算法才最终搞定. 搞服务器端小伙伴没有接触过iOS,所以也没料到过这种情形.他使用了AES128 with IV的加密算法,Android端可以顺利通过加密验证. 但是iOS端使用AES128算法后出现问题,虽然可以在本地加密解密,但是无法被服

【转】PHP android ios相互兼容的AES加密算法

APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ANDROID IOS,相互加解密正常的AES加密算法代码. PHP的AES加密算法: <?php class MCrypt { private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in t

AES加密算法C代码分析

0.引言 对于加密算法的软件实现,通常已经有很多的成熟的库可供选择,只需要根据自己的要求进行选择即可相应的库即可(有的可能需要进行些许修改).这里选择的是C语言实现的一个开源密码库mbedTLS,mbedTLS由XySSL发展而来,后改为PolarSSL,PolarSSL被ARM公司收购后改成了mbedTLS,主要用于物联网等安全嵌入式领域.mbedTLS实现了常见的分组加密算法.hash算法.RSA以及ECC公钥密码体制,一个适用于嵌入式的SSL协议以及X509证书等,基本能够满足大部分的嵌入

java封装AES加密算法

在实际coding中会经常遇到往数据库存入密码时加密,URL传参时的加密,由此简单封装了下java中的AES加密算法. 0.import类 import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.a

[Android 成长之路]2-实现带图标的ListView

--by San[[email protected]] 在编写列表时,如果是普通的列表,使用ListView + ArrayAdapter 即可实现,但是如果要在每个列表项中文字前配一个图标了,或者在文字后面再配一个图标,这个就可以用 SimpleAdapter 实现了,不要被它的名字欺骗了,It is not simple, it is powerful. 我们以制作一个带图标的菜单列表为例,首先我们创建一个布局文件 menu_frame.xml,里面包含一个 ListView, 代码如下:

Android 数据加密算法

一,DES加密: public class DesHelper { private static String strDefaultKey = "national"; private Cipher encryptCipher = null; private Cipher decryptCipher = null; // 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[] * hexStr2ByteAr