Android的对称加密与Base64加密

来源:互联网 发布:部队网络安全管理 编辑:程序博客网 时间:2024/05/01 07:15

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。常用的对称加密方式为:DES,AES。

DES的加密解密实例:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class MainActivity extends AppCompatActivity {  
  2.     private EditText des_input;  
  3.     private EditText des_password;  
  4.     private TextView show_des_encrypt;  
  5.     private TextView show_des_decrypt;  
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.         initView();  
  11.     }  
  12.     private void initView() {  
  13.         des_input = ((EditText) findViewById(R.id.des_input));  
  14.         des_password = ((EditText) findViewById(R.id.des_password));  
  15.         show_des_encrypt = ((TextView) findViewById(R.id.show_des_encrypt));  
  16.         show_des_decrypt = ((TextView) findViewById(R.id.show_des_decrypt));  
  17.     }  
  18.     /** 
  19.      * DES 加密 
  20.      * @param view 
  21.      */  
  22.     public void btnDESEncrypt(View view) {  
  23.         //将DES加密写成工具类  
  24. //        要加密内容  
  25.         byte[] data = des_input.getText().toString().getBytes();  
  26.         byte[] password = des_password.getText().toString().getBytes();  
  27.         //工具类DESUtils中方法encrypt返回值是什么类型  
  28.         byte[] result = DESUtils.encrypt(data, password);  
  29.         //处理加密结果  
  30.         byte[] encode = Base64.encode(result, Base64.DEFAULT);  
  31.         //显示一下加密的结果  
  32.         show_des_encrypt.setText(new String(encode));  
  33.     }  
  34.   
  35.     /** 
  36.      * DES 进行解密 
  37.      * @param view 
  38.      */  
  39.     public void btnDESDecrypt(View view) {  
  40.         //获取解密的数据  
  41.         byte[] data = show_des_encrypt.getText().toString().getBytes();  
  42.         byte[] decode = Base64.decode(data, Base64.DEFAULT);  
  43.         //获取密码  
  44.         byte[] password = des_password.getText().toString().getBytes();  
  45.         byte[] result = DESUtils.decrypt(decode,password);  
  46.         //对解密数据进行处理  
  47.         show_des_decrypt.setText(new String(result));  
  48.   
  49.     }  
  50. }  

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class DESUtils {  
  2.     public static byte[] encrypt(byte[] data, byte[] password) {  
  3.         byte[] ret = null;  
  4.         //判断参数是否符合条件  
  5.         if(data!=null&&data.length>0){  
  6.             if(password!=null&&password.length==8){  
  7.                 try {  
  8.                     //1、创造加密引擎  
  9.                     Cipher cipher = Cipher.getInstance("DES");  
  10.                     //2、初始化  
  11.                     SecretKeySpec key = new SecretKeySpec(password,"DES");  
  12.                     cipher.init(Cipher.ENCRYPT_MODE,key);  
  13.                     //3、对数据进行加密  
  14.                     ret =cipher.doFinal(data);  
  15.   
  16.                 } catch (NoSuchAlgorithmException e) {  
  17.                     e.printStackTrace();  
  18.                 } catch (NoSuchPaddingException e) {  
  19.                     e.printStackTrace();  
  20.                 } catch (InvalidKeyException e) {  
  21.                     e.printStackTrace();  
  22.                 } catch (BadPaddingException e) {  
  23.                     e.printStackTrace();  
  24.                 } catch (IllegalBlockSizeException e) {  
  25.                     e.printStackTrace();  
  26.                 }  
  27.             }  
  28.         }  
  29.         return ret;  
  30.     }  
  31.   
  32.     public static byte[] decrypt(byte[] data, byte[] password) {  
  33.         byte[] ret = null;  
  34.   
  35.         if(data!=null&&data.length>0){  
  36.             if(password!=null&&password.length==8){  
  37.                 try {  
  38.                     //1、获取解密引擎  
  39.                     Cipher cipher =Cipher.getInstance("DES");  
  40.   
  41.                     //2、初始化  
  42.                     SecretKeySpec key = new SecretKeySpec(password,"DES");  
  43.   
  44.                     cipher.init(Cipher.DECRYPT_MODE,key);  
  45.   
  46.                     //3、解密  
  47.                     ret = cipher.doFinal(data);  
  48.   
  49.                 } catch (NoSuchAlgorithmException e) {  
  50.                     e.printStackTrace();  
  51.                 } catch (NoSuchPaddingException e) {  
  52.                     e.printStackTrace();  
  53.                 } catch (InvalidKeyException e) {  
  54.                     e.printStackTrace();  
  55.                 } catch (BadPaddingException e) {  
  56.                     e.printStackTrace();  
  57.                 } catch (IllegalBlockSizeException e) {  
  58.                     e.printStackTrace();  
  59.                 }  
  60.   
  61.             }  
  62.   
  63.         }  
  64.         return ret;  
  65.     }  
  66. }  

AES的加密解密实例:

注意:输入的password和ivParams为16位

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class AESUtils {  
  2.     public static byte[] encrypt(byte[] data, byte[] password) {  
  3.         byte[] ret = null;  
  4.   
  5.         if(data!=null&&data.length>0){  
  6.             if(password!=null&&password.length==16){  
  7.   
  8.                 try {  
  9.                     //1、创造加密引擎  
  10.                     Cipher cipher = Cipher.getInstance("AES");  
  11.   
  12.                     //2、初始化,无法使用SecretKeyFactory  
  13.                     SecretKeySpec key = new SecretKeySpec(password,"AES");  
  14.   
  15.                     cipher.init(Cipher.ENCRYPT_MODE,key);  
  16.   
  17.                     //3、加密  
  18.                     ret = cipher.doFinal(data);  
  19.   
  20.                 } catch (NoSuchAlgorithmException e) {  
  21.                     e.printStackTrace();  
  22.                 } catch (NoSuchPaddingException e) {  
  23.                     e.printStackTrace();  
  24.                 } catch (InvalidKeyException e) {  
  25.                     e.printStackTrace();  
  26.                 } catch (BadPaddingException e) {  
  27.                     e.printStackTrace();  
  28.                 } catch (IllegalBlockSizeException e) {  
  29.                     e.printStackTrace();  
  30.                 }  
  31.             }  
  32.         }  
  33.         return ret;  
  34.     }  
  35.   
  36.     public static byte[] decrypt(byte[] data, byte[] password) {  
  37.         byte[] ret = null;  
  38.   
  39.         if(data!=null&&data.length>0){  
  40.             if(password!=null&&password.length==16){  
  41.   
  42.                 try {  
  43.                     //1、创造加密引擎  
  44.                     Cipher cipher = Cipher.getInstance("AES");  
  45.   
  46.                     //2、初始化,无法使用SecretKeyFactory  
  47.                     SecretKeySpec key = new SecretKeySpec(password,"AES");  
  48.   
  49.                     cipher.init(Cipher.DECRYPT_MODE,key);  
  50.   
  51.                     //3、加密  
  52.                     ret = cipher.doFinal(data);  
  53.   
  54.                 } catch (NoSuchAlgorithmException e) {  
  55.                     e.printStackTrace();  
  56.                 } catch (NoSuchPaddingException e) {  
  57.                     e.printStackTrace();  
  58.                 } catch (InvalidKeyException e) {  
  59.                     e.printStackTrace();  
  60.                 } catch (BadPaddingException e) {  
  61.                     e.printStackTrace();  
  62.                 } catch (IllegalBlockSizeException e) {  
  63.                     e.printStackTrace();  
  64.                 }  
  65.             }  
  66.         }  
  67.         return ret;  
  68.     }  
  69.   
  70.     /** 
  71.      * AES 第二种加密算法 
  72.      * @param data 
  73.      * @param password 
  74.      * @param ivParams 
  75.      * @return 
  76.      */  
  77.     public static byte[] encrypt2(byte[] data, byte[] password, byte[] ivParams) {  
  78.         byte[] ret = null;  
  79.         if(data!=null&&data.length>0){  
  80.             if(password!=null&&password.length==16&&ivParams!=null&&ivParams.length==16){  
  81.                 try {  
  82.                     //1、创造加密引擎,CBC:加密模式;PKCS5Padding:填充模式  
  83.                     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");  
  84.   
  85.                     //2、初始化,无法使用SecretKeyFactory  
  86.                     SecretKeySpec key = new SecretKeySpec(password,"AES");  
  87.   
  88.                     //相当于第二个密码,向量参数,加密级别更高  
  89.                     IvParameterSpec iv_params = new IvParameterSpec(ivParams);  
  90.   
  91.                     cipher.init(Cipher.ENCRYPT_MODE,key,iv_params);  
  92.   
  93.                     //3、加密  
  94.                     ret = cipher.doFinal(data);  
  95.   
  96.                 } catch (NoSuchAlgorithmException e) {  
  97.                     e.printStackTrace();  
  98.                 } catch (NoSuchPaddingException e) {  
  99.                     e.printStackTrace();  
  100.                 } catch (InvalidKeyException e) {  
  101.                     e.printStackTrace();  
  102.                 } catch (BadPaddingException e) {  
  103.                     e.printStackTrace();  
  104.                 } catch (IllegalBlockSizeException e) {  
  105.                     e.printStackTrace();  
  106.                 } catch (InvalidAlgorithmParameterException e) {  
  107.                     e.printStackTrace();  
  108.                 }  
  109.             }  
  110.         }  
  111.         return ret;  
  112.     }  
  113. }  

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class MainActivity extends AppCompatActivity {  
  2.     private EditText aes_input;  
  3.     private EditText aes_password;  
  4.     private TextView show_aes_decrypt;  
  5.     private TextView show_aes_encrypt;  
  6.     private byte[] password;  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.activity_main);  
  12.         initView();  
  13.     }  
  14.     private void initView() {  
  15.         aes_input = ((EditText) findViewById(R.id.aes_input));  
  16.         aes_password = ((EditText) findViewById(R.id.aes_password));  
  17.         show_aes_encrypt = ((TextView) findViewById(R.id.show_aes_encrypt));  
  18.         show_aes_decrypt = ((TextView) findViewById(R.id.show_aes_decrypt));  
  19.     }  
  20.   
  21.     public void qqq(View view) {  
  22.   
  23.         byte[] data = aes_input.getText().toString().getBytes();  
  24.         password = aes_password.getText().toString().getBytes();  
  25.         //采用第二套加密算法,需要一个向量参数,相当于另一套密码  
  26.         //指定向量参数(密码)  
  27.         String iv = "0123456789abcdef";  
  28.         //提供一个向量参数  
  29.         byte[] ivParams = iv.getBytes();  
  30.         byte[] result = AESUtils.encrypt2(data,password,ivParams);  
  31.         //对返回来的结果进行处理,显示  
  32.         byte[] encode = Base64.encode(result, Base64.DEFAULT);  
  33.         show_aes_encrypt.setText(new String(encode));  
  34.   
  35.     }  
  36.   
  37.     public void www(View view) {  
  38.   
  39.         byte[] data = show_aes_encrypt.getText().toString().getBytes();  
  40.   
  41.         //对data进行处理  
  42.         data = Base64.decode(data,Base64.DEFAULT);  
  43.   
  44.         byte[] result = AESUtils.decrypt(data,password);  
  45.   
  46.         if (result != null) {  
  47.             show_aes_decrypt.setText(new String(result));  
  48.         }else {  
  49.             show_aes_decrypt.setText("解密失败");  
  50.         }  
  51.     }  
  52. }  

Base64加密实例:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class Base64Activity extends AppCompatActivity {  
  2.   
  3.     private EditText input;  
  4.     private TextView show_base64_encode;  
  5.     private TextView show_base64_decode;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_base64);  
  11.   
  12.         initView();  
  13. //      initData();  
  14.     }  
  15.   
  16.     private void initData() {  
  17.         String input = this.input.getText().toString();  
  18.   
  19.         if (input != null) {  
  20.             byte[] bytes = input.getBytes();  
  21.             byte[] encode = Base64.encode(bytes, 0, bytes.length, Base64.NO_WRAP);  
  22.             //显示咱们编码的内容  
  23.             show_base64_encode.setText(new String(encode));  
  24.         }  
  25.     }  
  26.     private void initView() {  
  27.         input = ((EditText) findViewById(R.id.input));  
  28.         show_base64_encode = ((TextView) findViewById(R.id.show_base64_encode));  
  29.         show_base64_decode = ((TextView) findViewById(R.id.show_base64_decode));  
  30.     }  
  31.     /** 
  32.      * 进行Base64编码 
  33.      * @param view 
  34.      */  
  35.     public void btnBase64Encode(View view) {  
  36.         String input = this.input.getText().toString();  
  37.         if (input != null) {  
  38.             byte[] bytes = input.getBytes();  
  39.             byte[] encode = Base64.encode(bytes, 0, bytes.length, Base64.NO_WRAP);  
  40.             //Base64,在进行编码时采用什么样的格式进行编码,建议大家解码时就采用什么样的形式进行解码  
  41.             //保证数据万无一失,没有错误,肯定是这种逻辑  
  42.             String encodeToString = Base64.encodeToString(bytes, 0, bytes.length, Base64.NO_WRAP);  
  43.             //显示咱们编码的内容  
  44. //            show_base64_encode.setText(new String(encode));  
  45.             show_base64_encode.setText(encodeToString);  
  46.         }  
  47.     }  
  48.   
  49.     /** 
  50.      * 进行Base64解密 
  51.      * @param view 
  52.      */  
  53.     public void btnBase64Decode(View view) {  
  54.         String str = show_base64_encode.getText().toString();  
  55.   
  56.         byte[] decode = Base64.decode(str, Base64.DEFAULT);  
  57.   
  58.         byte[] decode1 = Base64.decode(str.getBytes(), 0, str.getBytes().length, Base64.DEFAULT);  
  59.   
  60.         show_base64_decode.setText(new String(decode1));  
  61.     }  
  62. }  

2 0
原创粉丝点击