• 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,专家级程序员写好包,工程人员会用就行了。

    这个例子其实是来自http://www.tutorials-android.com/learn/How_to_encrypt_and_decrypt_strings.rhtml

    src目录主文件:

    [java] view plaincopy
     
    1. package com.qq;  
    2. import java.security.SecureRandom;  
    3.   
    4. import javax.crypto.Cipher;  
    5. import javax.crypto.KeyGenerator;  
    6. import javax.crypto.SecretKey;  
    7. import javax.crypto.spec.SecretKeySpec;  
    8.   
    9. import android.app.Activity;  
    10. import android.os.Bundle;  
    11. import android.util.Log;  
    12.   
    13. public class SimpleCrypto extends Activity {  
    14.      public static String encrypt(String seed, String cleartext) throws Exception {      
    15.             byte[] rawKey = getRawKey(seed.getBytes());      
    16.             byte[] result = encrypt(rawKey, cleartext.getBytes());      
    17.             return toHex(result);      
    18.         }      
    19.               
    20.         public static String decrypt(String seed, String encrypted) throws Exception {      
    21.             byte[] rawKey = getRawKey(seed.getBytes());      
    22.             byte[] enc = toByte(encrypted);      
    23.             byte[] result = decrypt(rawKey, enc);      
    24.             return new String(result);      
    25.         }      
    26.          
    27.         private static byte[] getRawKey(byte[] seed) throws Exception {      
    28.             KeyGenerator kgen = KeyGenerator.getInstance("AES");      
    29.             SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");      
    30.             sr.setSeed(seed);      
    31.             kgen.init(128, sr); // 192 and 256 bits may not be available      
    32.             SecretKey skey = kgen.generateKey();      
    33.             byte[] raw = skey.getEncoded();      
    34.             return raw;      
    35.         }      
    36.          
    37.               
    38.         private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {      
    39.             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");      
    40.             Cipher cipher = Cipher.getInstance("AES");      
    41.             cipher.init(Cipher.ENCRYPT_MODE, skeySpec);      
    42.             byte[] encrypted = cipher.doFinal(clear);      
    43.             return encrypted;      
    44.         }      
    45.          
    46.         private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {      
    47.             SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");      
    48.             Cipher cipher = Cipher.getInstance("AES");      
    49.             cipher.init(Cipher.DECRYPT_MODE, skeySpec);      
    50.             byte[] decrypted = cipher.doFinal(encrypted);      
    51.             return decrypted;      
    52.         }      
    53.          
    54.         public static String toHex(String txt) {      
    55.             return toHex(txt.getBytes());      
    56.         }      
    57.         public static String fromHex(String hex) {      
    58.             return new String(toByte(hex));      
    59.         }      
    60.               
    61.         public static byte[] toByte(String hexString) {      
    62.             int len = hexString.length()/2;      
    63.             byte[] result = new byte[len];      
    64.             for (int i = 0; i < len; i++)      
    65.                 result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();      
    66.             return result;      
    67.         }      
    68.          
    69.         public static String toHex(byte[] buf) {      
    70.             if (buf == null)      
    71.                 return "";      
    72.             StringBuffer result = new StringBuffer(2*buf.length);      
    73.             for (int i = 0; i < buf.length; i++) {      
    74.                 appendHex(result, buf[i]);      
    75.             }      
    76.             return result.toString();      
    77.         }      
    78.         private final static String HEX = "0123456789ABCDEF";      
    79.         private static void appendHex(StringBuffer sb, byte b) {      
    80.             sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));      
    81.         }   
    82.     /** Called when the activity is first created. */  
    83.     @Override  
    84.     public void onCreate(Bundle savedInstanceState) {  
    85.         super.onCreate(savedInstanceState);  
    86.         setContentView(R.layout.main);  
    87.         String masterPassword = "a";  
    88.         String originalText = "0123456789";  
    89.         byte[] text = new byte[]{'0','1','2','3','4','5','6','7','8','9'};  
    90.         byte[] password = new byte[]{'a'};  
    91.         try {  
    92.             String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);  
    93. //          System.out.println("加密结果为 " + encryptingCode);  
    94.             Log.i("加密结果为 ",encryptingCode);  
    95.             String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);  
    96.             System.out.println("解密结果为 " + decryptingCode);  
    97.             Log.i("解密结果",decryptingCode);  
    98.            } catch (Exception e) {  
    99.             // TODO Auto-generated catch block  
    100.             e.printStackTrace();  
    101.     }  
    102.     }  
    103. }  


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

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

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

    I/解密结果(  190): 0123456789

  • 相关阅读:
    hdu--4487--dp
    gitLab重新配置ssh
    图片在DIV中垂直居中的显示方法
    Git教程学习 -- 第六篇 标签管理
    Git教程学习 -- 第五篇 Bug分支
    Git教程学习 --第四篇 分支管理
    Git 教程学习--第三篇
    Git 教程学习--第二篇
    Git 教程学习--第一篇
    动态修改title标题
  • 原文地址:https://www.cnblogs.com/ruiati/p/3813541.html
Copyright © 2020-2023  润新知