Android使用MD5加密算法加密密码

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

可以用FileBrower查看

File Explorer

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

下面是个小例子:

main.xml

login.xml

login.java

package com.loulijun.md5demo;

import android.app.Activity;
import android.os.Bundle;

public class Login extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
	}

}

MD5Demo.java

package com.loulijun.md5demo;

import java.security.MessageDigest;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MD5Demo extends Activity {
	private EditText username, password;
	private Button savebtn, loginbtn;
	String user, pass;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		username = (EditText) findViewById(R.id.username);
		password = (EditText) findViewById(R.id.password);
		savebtn = (Button) findViewById(R.id.save);
		loginbtn = (Button) findViewById(R.id.login);

		savebtn.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				SharedPreferences pre = getSharedPreferences("loginvalue",
						MODE_WORLD_WRITEABLE);
				pass = MD5(password.getText().toString());
				user = username.getText().toString();
				if (!pass.equals("") && !user.equals("")) {
					pre.edit()
							.putString("username",
									username.getText().toString())
							.putString("password", encryptmd5(pass)).commit();
					Toast.makeText(getApplicationContext(), "保存成功!",
							Toast.LENGTH_SHORT).show();
				} else {
					Toast.makeText(getApplicationContext(), "密码不能为空!",
							Toast.LENGTH_LONG).show();
				}

			}

		});
		loginbtn.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				SharedPreferences sp = getSharedPreferences("loginvalue",
						MODE_WORLD_READABLE);
				String loginuser = sp.getString("username", null);
				String loginpass = sp.getString("password", null);

				user = username.getText().toString();
				pass = password.getText().toString();

				String passmd5 = MD5(pass);
				String encryptmd5 = encryptmd5(passmd5);

				System.out.println("username=" + loginuser
						+ "-------------password=" + loginpass);
				System.out.println("user==" + user
						+ "-------------encryptmd5==" + encryptmd5);
				if (!user.equals("") && !pass.equals("")) {
					if (user.equals(loginuser) && encryptmd5.equals(loginpass)) {
						Intent intent = new Intent();
						intent.setClass(MD5Demo.this, Login.class);
						MD5Demo.this.startActivity(intent);
						finish();
					} else {
						Toast.makeText(getApplicationContext(), "密码是错误的!",
								Toast.LENGTH_LONG).show();
					}
				} else {
					Toast.makeText(getApplicationContext(), "密码不能为空!",
							Toast.LENGTH_LONG).show();
				}

			}

		});
	}

	// MD5加密,32位
	public static String MD5(String str) {
		MessageDigest md5 = null;
		try {
			md5 = MessageDigest.getInstance("MD5");
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}

		char[] charArray = str.toCharArray();
		byte[] byteArray = new byte[charArray.length];

		for (int i = 0; i < chararray.length;="" i++)="" {="" bytearray[i]="(byte)" chararray[i];="" }="" byte[]="" md5bytes="md5.digest(byteArray);" stringbuffer="" hexvalue="new" stringbuffer();="" for="" (int="" i="0;" i="">< md5bytes.length;="" i++)="" {="" int="" val="((int)" md5bytes[i])="" &="" 0xff;="" if="" (val="">< 16)="" {="" hexvalue.append("0");="" }="" hexvalue.append(integer.tohexstring(val));="" }="" return="" hexvalue.tostring();="" }="" 可逆的加密算法="" public="" static="" string="" encryptmd5(string="" str)="" {="" char[]="" a="str.toCharArray();" for="" (int="" i="0;" i="">< a.length;="" i++)="" {="" a[i]="(char)" (a[i]="" 
暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心