主题:Android杂谈---用MD5加密算法加密密码

很多的网络相关的软件都需要用户名密码登录,在开发的时候像这些密码都是保存在SharedPreferences中,这些密码保存在/data/data/包名/shared_prefs下,保存在一个XML文件中,如下:

可以用FileBrower查看


主题:Android杂谈---用MD5加密算法加密密码

开始说道正题,MD5加密算法虽然现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还是不会解开的。MD5加密算法是单向加 密,只能用你的密码才能解开,要不就是会解密算法,否则想都别想解开。为了防止这种情况的发生。还可以对加密过的密码进行再次加密。

 

下面是个小例子:

main.xml

 

Java代码   收藏代码
  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:orientation="vertical"   
  4.     android:layout_width="fill_parent"   
  5.     android:layout_height="fill_parent"   
  6.     >  
  7.     <EditText  
  8.         android:id="@+id/username"   
  9.         android:layout_width="fill_parent"   
  10.         android:layout_height="wrap_content"   
  11.         android:layout_marginLeft="10dp"   
  12.         android:layout_marginTop="20dp"   
  13.         android:layout_marginRight="10dp"   
  14.         android:hint="帐号"   
  15.     />  
  16.     <EditText  
  17.         android:id="@+id/password"   
  18.         android:password="true"   
  19.         android:layout_width="fill_parent"   
  20.         android:layout_height="wrap_content"   
  21.         android:layout_marginLeft="10dp"   
  22.         android:layout_marginTop="10dp"   
  23.         android:layout_marginRight="10dp"   
  24.         android:hint="密码"   
  25.     />  
  26.     <Button  
  27.         android:id="@+id/save"   
  28.         android:text="保存"   
  29.         android:layout_width="fill_parent"   
  30.         android:layout_height="wrap_content"   
  31.         android:layout_marginLeft="10dp"   
  32.         android:layout_marginTop="10dp"   
  33.         android:layout_marginRight="10dp"   
  34.     />  
  35.     <Button  
  36.         android:id="@+id/login"   
  37.         android:layout_width="fill_parent"   
  38.         android:layout_height="wrap_content"   
  39.         android:layout_marginLeft="10dp"   
  40.         android:layout_marginTop="10dp"   
  41.         android:layout_marginRight="10dp"   
  42.         android:text="登录"   
  43.     />  
  44. </LinearLayout>  

 login.xml

 

Java代码   收藏代码
  1. <?xml version= "1.0"  encoding= "utf-8" ?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"   
  4.   android:layout_width="match_parent"   
  5.   android:layout_height="match_parent"   
  6.   android:orientation="vertical" >  
  7.   <TextView  
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="login successful!"   
  11.   />  
  12. </LinearLayout>  

 login.java

 

Java代码   收藏代码
  1. package  com.loulijun.md5demo;  
  2.   
  3. import  android.app.Activity;  
  4. import  android.os.Bundle;  
  5.   
  6. public   class  Login  extends  Activity {  
  7.   
  8.     @Override   
  9.     protected   void  onCreate(Bundle savedInstanceState) {  
  10.         // TODO Auto-generated method stub   
  11.         super .onCreate(savedInstanceState);  
  12.         setContentView(R.layout.login);  
  13.     }  
  14.   
  15. }  

 MD5Demo.java

 

Java代码   收藏代码
  1. package  com.loulijun.md5demo;  
  2.   
  3. import  java.security.MessageDigest;  
  4.   
  5. import  android.app.Activity;  
  6. import  android.content.Intent;  
  7. import  android.content.SharedPreferences;  
  8. import  android.os.Bundle;  
  9. import  android.view.View;  
  10. import  android.widget.Button;  
  11. import  android.widget.EditText;  
  12. import  android.widget.Toast;  
  13.   
  14. public   class  MD5Demo  extends  Activity {  
  15.     private  EditText username,password;  
  16.     private  Button savebtn,loginbtn;  
  17.     String user,pass;  
  18.     @Override   
  19.     public   void  onCreate(Bundle savedInstanceState) {  
  20.         super .onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         username = (EditText)findViewById(R.id.username);  
  23.         password = (EditText)findViewById(R.id.password);  
  24.         savebtn = (Button)findViewById(R.id.save);  
  25.         loginbtn = (Button)findViewById(R.id.login);  
  26.   
  27.         savebtn.setOnClickListener(new  Button.OnClickListener()  
  28.         {  
  29.   
  30.             @Override   
  31.             public   void  onClick(View v) {  
  32.                 SharedPreferences pre = getSharedPreferences("loginvalue" ,MODE_WORLD_WRITEABLE);  
  33.                 pass = MD5(password.getText().toString());  
  34.                 user = username.getText().toString();  
  35.                 if (!pass.equals( "" )&&!user.equals( "" ))  
  36.                 {  
  37.                       pre.edit().putString("username" , username.getText().toString()).  
  38.                       putString("password" ,encryptmd5(pass)).commit();  
  39.                       Toast.makeText(getApplicationContext(), "保存成功!" , Toast.LENGTH_SHORT).show();  
  40.                 }else   
  41.                 {  
  42.                     Toast.makeText(getApplicationContext(), "密码不能为空!" , Toast.LENGTH_LONG).show();  
  43.                 }  
  44.                 
  45.                   
  46.             }  
  47.               
  48.         });  
  49.         loginbtn.setOnClickListener(new  Button.OnClickListener()  
  50.         {  
  51.               
  52.               
  53.             @Override   
  54.             public   void  onClick(View v) {  
  55.                 SharedPreferences sp = getSharedPreferences("loginvalue" , MODE_WORLD_READABLE);  
  56.                 String loginuser = sp.getString("username" null );  
  57.                 String loginpass = sp.getString("password" null );  
  58.                   
  59.                 user = username.getText().toString();  
  60.                 pass = password.getText().toString();  
  61.                   
  62.                 String passmd5 = MD5(pass);  
  63.                 String encryptmd5 = encryptmd5(passmd5);  
  64.                   
  65.                 System.out.println("username=" +loginuser+ "-------------password=" +loginpass);  
  66.                   System.out.println("user==" +user+ "-------------encryptmd5==" +encryptmd5);  
  67.                   if (!user.equals( "" )&&!pass.equals( "" ))  
  68.                   {  
  69.                       if ( user.equals(loginuser)&& encryptmd5.equals(loginpass))  
  70.                       {  
  71.                           Intent intent = new  Intent();  
  72.                           intent.setClass(MD5Demo.this , Login. class );  
  73.                           MD5Demo.this .startActivity(intent);    
  74.                           finish();  
  75.                       }else   
  76.                       {                 
  77.                           Toast.makeText(getApplicationContext(), "密码是错误的!" , Toast.LENGTH_LONG).show();  
  78.                       }  
  79.                   }else   
  80.                   {  
  81.                       Toast.makeText(getApplicationContext(), "密码不能为空!" , Toast.LENGTH_LONG).show();  
  82.                   }  
  83.                   
  84.             }  
  85.               
  86.         });  
  87.     }  
  88.       
  89.   //MD5加密,32位   
  90.     public   static  String MD5(String str)  
  91.     {  
  92.         MessageDigest md5 = null ;  
  93.         try   
  94.         {  
  95.             md5 = MessageDigest.getInstance("MD5" );  
  96.         }catch (Exception e)  
  97.         {  
  98.             e.printStackTrace();  
  99.             return   "" ;  
  100.         }  
  101.           
  102.         char [] charArray = str.toCharArray();  
  103.         byte [] byteArray =  new   byte [charArray.length];  
  104.           
  105.         for ( int  i =  0 ; i < charArray.length; i++)  
  106.         {  
  107.             byteArray[i] = (byte )charArray[i];  
  108.         }  
  109.         byte [] md5Bytes = md5.digest(byteArray);  
  110.           
  111.         StringBuffer hexValue = new  StringBuffer();  
  112.         for int  i =  0 ; i < md5Bytes.length; i++)  
  113.         {  
  114.             int  val = (( int )md5Bytes[i])& 0xff ;  
  115.             if (val <  16 )  
  116.             {  
  117.                 hexValue.append("0" );  
  118.             }  
  119.             hexValue.append(Integer.toHexString(val));  
  120.         }  
  121.         return  hexValue.toString();  
  122.     }  
  123.       
  124.     // 可逆的加密算法   
  125.     public   static  String encryptmd5(String str) {  
  126.         char [] a = str.toCharArray();  
  127.         for  ( int  i =  0 ; i < a.length; i++)   
  128.         {  
  129.                 a[i] = (char ) (a[i] ^  'l' );  
  130.         }  
  131.         String s = new  String(a);  
  132.         return  s;  
  133.     }  
  134.   
  135. }  

 程序很简单,下面是运行的效果:


主题:Android杂谈---用MD5加密算法加密密码


主题:Android杂谈---用MD5加密算法加密密码
 
主题:Android杂谈---用MD5加密算法加密密码

你可能感兴趣的:(android,MD5加密算法加密密码)