對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。常用的對稱加密方式為:DES,AES。
DES的加密解密實例:
- publicclassMainActivityextendsAppCompatActivity{
- privateEditTextdes_input;
- privateEditTextdes_password;
- privateTextViewshow_des_encrypt;
- privateTextViewshow_des_decrypt;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- privatevoidinitView(){
- des_input=((EditText)findViewById(R.id.des_input));
- des_password=((EditText)findViewById(R.id.des_password));
- show_des_encrypt=((TextView)findViewById(R.id.show_des_encrypt));
- show_des_decrypt=((TextView)findViewById(R.id.show_des_decrypt));
- }
- /**
- *DES加密
- *@paramview
- */
- publicvoidbtnDESEncrypt(Viewview){
- //將DES加密寫成工具類
- //要加密內容
- byte[]data=des_input.getText().toString().getBytes();
- byte[]password=des_password.getText().toString().getBytes();
- //工具類DESUtils中方法encrypt返回值是什麼類型
- byte[]result=DESUtils.encrypt(data,password);
- //處理加密結果
- byte[]encode=Base64.encode(result,Base64.DEFAULT);
- //顯示一下加密的結果
- show_des_encrypt.setText(newString(encode));
- }
-
- /**
- *DES進行解密
- *@paramview
- */
- publicvoidbtnDESDecrypt(Viewview){
- //獲取解密的數據
- byte[]data=show_des_encrypt.getText().toString().getBytes();
- byte[]decode=Base64.decode(data,Base64.DEFAULT);
- //獲取密碼
- byte[]password=des_password.getText().toString().getBytes();
- byte[]result=DESUtils.decrypt(decode,password);
- //對解密數據進行處理
- show_des_decrypt.setText(newString(result));
-
- }
- }
- publicclassDESUtils{
- publicstaticbyte[]encrypt(byte[]data,byte[]password){
- byte[]ret=null;
- //判斷參數是否符合條件
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==8){
- try{
- //1、創造加密引擎
- Ciphercipher=Cipher.getInstance("DES");
- //2、初始化
- SecretKeySpeckey=newSecretKeySpec(password,"DES");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- //3、對數據進行加密
- ret=cipher.doFinal(data);
-
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }
- }
- }
- returnret;
- }
-
- publicstaticbyte[]decrypt(byte[]data,byte[]password){
- byte[]ret=null;
-
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==8){
- try{
- //1、獲取解密引擎
- Ciphercipher=Cipher.getInstance("DES");
-
- //2、初始化
- SecretKeySpeckey=newSecretKeySpec(password,"DES");
-
- cipher.init(Cipher.DECRYPT_MODE,key);
-
- //3、解密
- ret=cipher.doFinal(data);
-
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }
-
- }
-
- }
- returnret;
- }
- }
AES的加密解密實例:
注意:輸入的password和ivParams為16位
- publicclassAESUtils{
- publicstaticbyte[]encrypt(byte[]data,byte[]password){
- byte[]ret=null;
-
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16){
-
- try{
- //1、創造加密引擎
- Ciphercipher=Cipher.getInstance("AES");
-
- //2、初始化,無法使用SecretKeyFactory
- SecretKeySpeckey=newSecretKeySpec(password,"AES");
-
- cipher.init(Cipher.ENCRYPT_MODE,key);
-
- //3、加密
- ret=cipher.doFinal(data);
-
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }
- }
- }
- returnret;
- }
-
- publicstaticbyte[]decrypt(byte[]data,byte[]password){
- byte[]ret=null;
-
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16){
-
- try{
- //1、創造加密引擎
- Ciphercipher=Cipher.getInstance("AES");
-
- //2、初始化,無法使用SecretKeyFactory
- SecretKeySpeckey=newSecretKeySpec(password,"AES");
-
- cipher.init(Cipher.DECRYPT_MODE,key);
-
- //3、加密
- ret=cipher.doFinal(data);
-
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }
- }
- }
- returnret;
- }
-
- /**
- *AES第二種加密算法
- *@paramdata
- *@parampassword
- *@paramivParams
- *@return
- */
- publicstaticbyte[]encrypt2(byte[]data,byte[]password,byte[]ivParams){
- byte[]ret=null;
- if(data!=null&&data.length>0){
- if(password!=null&&password.length==16&&ivParams!=null&&ivParams.length==16){
- try{
- //1、創造加密引擎,CBC:加密模式;PKCS5Padding:填充模式
- Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
-
- //2、初始化,無法使用SecretKeyFactory
- SecretKeySpeckey=newSecretKeySpec(password,"AES");
-
- //相當於第二個密碼,向量參數,加密級別更高
- IvParameterSpeciv_params=newIvParameterSpec(ivParams);
-
- cipher.init(Cipher.ENCRYPT_MODE,key,iv_params);
-
- //3、加密
- ret=cipher.doFinal(data);
-
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }catch(InvalidAlgorithmParameterExceptione){
- e.printStackTrace();
- }
- }
- }
- returnret;
- }
- }
- publicclassMainActivityextendsAppCompatActivity{
- privateEditTextaes_input;
- privateEditTextaes_password;
- privateTextViewshow_aes_decrypt;
- privateTextViewshow_aes_encrypt;
- privatebyte[]password;
-
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- }
- privatevoidinitView(){
- aes_input=((EditText)findViewById(R.id.aes_input));
- aes_password=((EditText)findViewById(R.id.aes_password));
- show_aes_encrypt=((TextView)findViewById(R.id.show_aes_encrypt));
- show_aes_decrypt=((TextView)findViewById(R.id.show_aes_decrypt));
- }
-
- publicvoidqqq(Viewview){
-
- byte[]data=aes_input.getText().toString().getBytes();
- password=aes_password.getText().toString().getBytes();
- //采用第二套加密算法,需要一個向量參數,相當於另一套密碼
- //指定向量參數(密碼)
- Stringiv="0123456789abcdef";
- //提供一個向量參數
- byte[]ivParams=iv.getBytes();
- byte[]result=AESUtils.encrypt2(data,password,ivParams);
- //對返回來的結果進行處理,顯示
- byte[]encode=Base64.encode(result,Base64.DEFAULT);
- show_aes_encrypt.setText(newString(encode));
-
- }
-
- publicvoidwww(Viewview){
-
- byte[]data=show_aes_encrypt.getText().toString().getBytes();
-
- //對data進行處理
- data=Base64.decode(data,Base64.DEFAULT);
-
- byte[]result=AESUtils.decrypt(data,password);
-
- if(result!=null){
- show_aes_decrypt.setText(newString(result));
- }else{
- show_aes_decrypt.setText("解密失敗");
- }
- }
- }
- publicclassBase64ActivityextendsAppCompatActivity{
-
- privateEditTextinput;
- privateTextViewshow_base64_encode;
- privateTextViewshow_base64_decode;
-
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_base64);
-
- initView();
- //initData();
- }
-
- privatevoidinitData(){
- Stringinput=this.input.getText().toString();
-
- if(input!=null){
- byte[]bytes=input.getBytes();
- byte[]encode=Base64.encode(bytes,0,bytes.length,Base64.NO_WRAP);
- //顯示咱們編碼的內容
- show_base64_encode.setText(newString(encode));
- }
- }
- privatevoidinitView(){
- input=((EditText)findViewById(R.id.input));
- show_base64_encode=((TextView)findViewById(R.id.show_base64_encode));
- show_base64_decode=((TextView)findViewById(R.id.show_base64_decode));
- }
- /**
- *進行Base64編碼
- *@paramview
- */
- publicvoidbtnBase64Encode(Viewview){
- Stringinput=this.input.getText().toString();
- if(input!=null){
- byte[]bytes=input.getBytes();
- byte[]encode=Base64.encode(bytes,0,bytes.length,Base64.NO_WRAP);
- //Base64,在進行編碼時采用什麼樣的格式進行編碼,建議大家解碼時就采用什麼樣的形式進行解碼
- //保證數據萬無一失,沒有錯誤,肯定是這種邏輯
- StringencodeToString=Base64.encodeToString(bytes,0,bytes.length,Base64.NO_WRAP);
- //顯示咱們編碼的內容
- //show_base64_encode.setText(newString(encode));
- show_base64_encode.setText(encodeToString);
- }
- }
-
- /**
- *進行Base64解密
- *@paramview
- */
- publicvoidbtnBase64Decode(Viewview){
- Stringstr=show_base64_encode.getText().toString();
-
- byte[]decode=Base64.decode(str,Base64.DEFAULT);
-
- byte[]decode1=Base64.decode(str.getBytes(),0,str.getBytes().length,Base64.DEFAULT);
-
- show_base64_decode.setText(newString(decode1));
- }
- }