Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android的對稱加密與Base64加密

Android的對稱加密與Base64加密

編輯:關於Android編程

對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。常用的對稱加密方式為:DES,AES。

DES的加密解密實例:

  1. publicclassMainActivityextendsAppCompatActivity{
  2. privateEditTextdes_input;
  3. privateEditTextdes_password;
  4. privateTextViewshow_des_encrypt;
  5. privateTextViewshow_des_decrypt;
  6. @Override
  7. protectedvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. initView();
  11. }
  12. privatevoidinitView(){
  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. *@paramview
  21. */
  22. publicvoidbtnDESEncrypt(Viewview){
  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(newString(encode));
  33. }
  34.  
  35. /**
  36. *DES進行解密
  37. *@paramview
  38. */
  39. publicvoidbtnDESDecrypt(Viewview){
  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(newString(result));
  48.  
  49. }
  50. }


  1. publicclassDESUtils{
  2. publicstaticbyte[]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. Ciphercipher=Cipher.getInstance("DES");
  10. //2、初始化
  11. SecretKeySpeckey=newSecretKeySpec(password,"DES");
  12. cipher.init(Cipher.ENCRYPT_MODE,key);
  13. //3、對數據進行加密
  14. ret=cipher.doFinal(data);
  15.  
  16. }catch(NoSuchAlgorithmExceptione){
  17. e.printStackTrace();
  18. }catch(NoSuchPaddingExceptione){
  19. e.printStackTrace();
  20. }catch(InvalidKeyExceptione){
  21. e.printStackTrace();
  22. }catch(BadPaddingExceptione){
  23. e.printStackTrace();
  24. }catch(IllegalBlockSizeExceptione){
  25. e.printStackTrace();
  26. }
  27. }
  28. }
  29. returnret;
  30. }
  31.  
  32. publicstaticbyte[]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. Ciphercipher=Cipher.getInstance("DES");
  40.  
  41. //2、初始化
  42. SecretKeySpeckey=newSecretKeySpec(password,"DES");
  43.  
  44. cipher.init(Cipher.DECRYPT_MODE,key);
  45.  
  46. //3、解密
  47. ret=cipher.doFinal(data);
  48.  
  49. }catch(NoSuchAlgorithmExceptione){
  50. e.printStackTrace();
  51. }catch(NoSuchPaddingExceptione){
  52. e.printStackTrace();
  53. }catch(InvalidKeyExceptione){
  54. e.printStackTrace();
  55. }catch(BadPaddingExceptione){
  56. e.printStackTrace();
  57. }catch(IllegalBlockSizeExceptione){
  58. e.printStackTrace();
  59. }
  60.  
  61. }
  62.  
  63. }
  64. returnret;
  65. }
  66. }
\

 

AES的加密解密實例:

注意:輸入的password和ivParams為16位

  1. publicclassAESUtils{
  2. publicstaticbyte[]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. Ciphercipher=Cipher.getInstance("AES");
  11.  
  12. //2、初始化,無法使用SecretKeyFactory
  13. SecretKeySpeckey=newSecretKeySpec(password,"AES");
  14.  
  15. cipher.init(Cipher.ENCRYPT_MODE,key);
  16.  
  17. //3、加密
  18. ret=cipher.doFinal(data);
  19.  
  20. }catch(NoSuchAlgorithmExceptione){
  21. e.printStackTrace();
  22. }catch(NoSuchPaddingExceptione){
  23. e.printStackTrace();
  24. }catch(InvalidKeyExceptione){
  25. e.printStackTrace();
  26. }catch(BadPaddingExceptione){
  27. e.printStackTrace();
  28. }catch(IllegalBlockSizeExceptione){
  29. e.printStackTrace();
  30. }
  31. }
  32. }
  33. returnret;
  34. }
  35.  
  36. publicstaticbyte[]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. Ciphercipher=Cipher.getInstance("AES");
  45.  
  46. //2、初始化,無法使用SecretKeyFactory
  47. SecretKeySpeckey=newSecretKeySpec(password,"AES");
  48.  
  49. cipher.init(Cipher.DECRYPT_MODE,key);
  50.  
  51. //3、加密
  52. ret=cipher.doFinal(data);
  53.  
  54. }catch(NoSuchAlgorithmExceptione){
  55. e.printStackTrace();
  56. }catch(NoSuchPaddingExceptione){
  57. e.printStackTrace();
  58. }catch(InvalidKeyExceptione){
  59. e.printStackTrace();
  60. }catch(BadPaddingExceptione){
  61. e.printStackTrace();
  62. }catch(IllegalBlockSizeExceptione){
  63. e.printStackTrace();
  64. }
  65. }
  66. }
  67. returnret;
  68. }
  69.  
  70. /**
  71. *AES第二種加密算法
  72. *@paramdata
  73. *@parampassword
  74. *@paramivParams
  75. *@return
  76. */
  77. publicstaticbyte[]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. Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
  84.  
  85. //2、初始化,無法使用SecretKeyFactory
  86. SecretKeySpeckey=newSecretKeySpec(password,"AES");
  87.  
  88. //相當於第二個密碼,向量參數,加密級別更高
  89. IvParameterSpeciv_params=newIvParameterSpec(ivParams);
  90.  
  91. cipher.init(Cipher.ENCRYPT_MODE,key,iv_params);
  92.  
  93. //3、加密
  94. ret=cipher.doFinal(data);
  95.  
  96. }catch(NoSuchAlgorithmExceptione){
  97. e.printStackTrace();
  98. }catch(NoSuchPaddingExceptione){
  99. e.printStackTrace();
  100. }catch(InvalidKeyExceptione){
  101. e.printStackTrace();
  102. }catch(BadPaddingExceptione){
  103. e.printStackTrace();
  104. }catch(IllegalBlockSizeExceptione){
  105. e.printStackTrace();
  106. }catch(InvalidAlgorithmParameterExceptione){
  107. e.printStackTrace();
  108. }
  109. }
  110. }
  111. returnret;
  112. }
  113. }
  1. publicclassMainActivityextendsAppCompatActivity{
  2. privateEditTextaes_input;
  3. privateEditTextaes_password;
  4. privateTextViewshow_aes_decrypt;
  5. privateTextViewshow_aes_encrypt;
  6. privatebyte[]password;
  7.  
  8. @Override
  9. protectedvoidonCreate(BundlesavedInstanceState){
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. initView();
  13. }
  14. privatevoidinitView(){
  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. publicvoidqqq(Viewview){
  22.  
  23. byte[]data=aes_input.getText().toString().getBytes();
  24. password=aes_password.getText().toString().getBytes();
  25. //采用第二套加密算法,需要一個向量參數,相當於另一套密碼
  26. //指定向量參數(密碼)
  27. Stringiv="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(newString(encode));
  34.  
  35. }
  36.  
  37. publicvoidwww(Viewview){
  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(newString(result));
  48. }else{
  49. show_aes_decrypt.setText("解密失敗");
  50. }
  51. }
  52. }
\
  1. publicclassBase64ActivityextendsAppCompatActivity{
  2.  
  3. privateEditTextinput;
  4. privateTextViewshow_base64_encode;
  5. privateTextViewshow_base64_decode;
  6.  
  7. @Override
  8. protectedvoidonCreate(BundlesavedInstanceState){
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_base64);
  11.  
  12. initView();
  13. //initData();
  14. }
  15.  
  16. privatevoidinitData(){
  17. Stringinput=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(newString(encode));
  24. }
  25. }
  26. privatevoidinitView(){
  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. *@paramview
  34. */
  35. publicvoidbtnBase64Encode(Viewview){
  36. Stringinput=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. StringencodeToString=Base64.encodeToString(bytes,0,bytes.length,Base64.NO_WRAP);
  43. //顯示咱們編碼的內容
  44. //show_base64_encode.setText(newString(encode));
  45. show_base64_encode.setText(encodeToString);
  46. }
  47. }
  48.  
  49. /**
  50. *進行Base64解密
  51. *@paramview
  52. */
  53. publicvoidbtnBase64Decode(Viewview){
  54. Stringstr=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(newString(decode1));
  61. }
  62. }
\

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved