加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Android AES加密算法及其达成

发布时间:2021-11-25 19:10:16 所属栏目:教程 来源:互联网
导读: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 and

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

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读