Android杂谈---用MD5加密算法加密密码

 

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

可以用FileBrower查看


Android杂谈---用MD5加密算法加密密码_第1张图片

开始说道正题,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.         forint 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加密算法加密密码_第2张图片


Android杂谈---用MD5加密算法加密密码_第3张图片
 
Android杂谈---用MD5加密算法加密密码_第4张图片

 
  • Android杂谈---用MD5加密算法加密密码_第5张图片
  • 大小: 9.2 KB
  • Android杂谈---用MD5加密算法加密密码_第6张图片
  • 大小: 14.7 KB
  • Android杂谈---用MD5加密算法加密密码_第7张图片
  • 大小: 24 KB
  • Android杂谈---用MD5加密算法加密密码_第8张图片
  • 大小: 6.8 KB
  • 查看图片附件

你可能感兴趣的:(Android杂谈---用MD5加密算法加密密码)