⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 passwordmidlet.java

📁 J2ME核心类及MIDlet类 MIDP用户界面对象 图形处理及低级事件处理 多线程编程 I/O及网络编程 数据库RMS编程 浮点数编程 多媒体及GAME API编程 安全、加密及
💻 JAVA
字号:
import java.io.*;
import java.util.Random;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;

public class PasswordMIDlet extends MIDlet 
{
	private Display mDisplay;
	private Form mForm;
	private TextField mUserField, mPasswordField;
	private Random mRandom;

	public void startApp() 
	{
		mDisplay = Display.getDisplay(this);
		mRandom = new Random(System.currentTimeMillis());
		if (mForm == null) 
		{
			mForm = new Form("Login");
			mUserField = new TextField("Name", "TangDashi", 32, 0);
			mPasswordField = new TextField("Password", "happy8", 32, 0);
			mForm.append(mUserField);
			mForm.append(mPasswordField);
			mForm.addCommand(new Command("Exit", Command.EXIT, 0));
			mForm.addCommand(new Command("Login", Command.SCREEN, 0));
			mForm.setCommandListener(new CommandListener() {
				public void commandAction(Command c, Displayable s) {
					if (c.getCommandType() == Command.EXIT) 
						notifyDestroyed();
					else 
						login();
				}
			});
		}
		mDisplay.setCurrent(mForm);
	}

	private void login() 
	{
		// 取得信息
		long timestamp = System.currentTimeMillis();
		long randomNumber = mRandom.nextLong();
		String user = mUserField.getString();
		byte[] userBytes = user.getBytes();
		byte[] timestampBytes = getBytes(timestamp);
		byte[] randomBytes = getBytes(randomNumber);
		String password = mPasswordField.getString();
		byte[] passwordBytes = password.getBytes();
		
		// 生成 digest.
		Digest digest = new SHA1Digest();
		digest.update(userBytes, 0, userBytes.length);
		digest.update(timestampBytes, 0, timestampBytes.length);
		digest.update(randomBytes, 0, randomBytes.length);
		digest.update(passwordBytes, 0, passwordBytes.length);
		byte[] digestValue = new byte[digest.getDigestSize()];
		digest.doFinal(digestValue, 0);

		// 生成
		URLBuilder ub = new URLBuilder("http://localhost/PasswordServlet");
		ub.addParameter("user", user);
		ub.addParameter("timestamp",
			new String(HexCodec.bytesToHex(timestampBytes)));
		ub.addParameter("random",
			new String(HexCodec.bytesToHex(randomBytes)));
		ub.addParameter("digest",
			new String(HexCodec.bytesToHex(digestValue)));
		String url = ub.toString();
		try 
		{
			// 与服务端连接,并取得信息
			HttpConnection hc = (HttpConnection)Connector.open(url);
			InputStream in = hc.openInputStream();
			int length = (int)hc.getLength();
			byte[] raw = new byte[length];
			in.read(raw);
			String response = new String(raw);
			Alert a = new Alert("Response", response, null, null);
			a.setTimeout(Alert.FOREVER);
			mDisplay.setCurrent(a, mForm);
			in.close();
			hc.close();
		}
		catch (IOException ioe) 
		{
			Alert a = new Alert("Exception", ioe.toString(), null, null);
			a.setTimeout(Alert.FOREVER);
			mDisplay.setCurrent(a, mForm);
		}
	}

	private byte[] getBytes(long x) 
	{
		byte[] bytes = new byte[8];
		for (int i = 0; i < 8; i++)
			bytes[i] = (byte)(x >> ((7 - i) * 8));
		return bytes;
	}

	public void pauseApp() {}
	public void destroyApp(boolean unconditional) {}
}


class HexCodec 
{
	private static char[] kDigits = 
		{
			'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
			'a', 'b', 'c', 'd', 'e', 'f'
		};
	public static char[] bytesToHex(byte[] raw) 
	{
		int length = raw.length;
		char[] hex = new char[length * 2];
		for (int i = 0; i < length; i++) 
		{
			int value = (raw[i] + 256) % 256;
			int highIndex = value >> 4;
			int lowIndex = value & 0x0f;
			hex[i * 2 + 0] = kDigits[highIndex];
			hex[i * 2 + 1] = kDigits[lowIndex];
		}
		return hex;
	}
	public static byte[] hexToBytes(char[] hex) 
	{
		int length = hex.length / 2;
		byte[] raw = new byte[length];
		for (int i = 0; i < length; i++) 
		{
			int high = Character.digit(hex[i * 2], 16);
			int low = Character.digit(hex[i * 2 + 1], 16);
			int value = (high << 4) | low;
			if (value > 127) value -= 256;
			raw[i] = (byte)value;
		}
		return raw;
	}
	public static byte[] hexToBytes(String hex) 
	{
		return hexToBytes(hex.toCharArray());
	}
}

// 生成URL
class URLBuilder 
{
	private StringBuffer mBuffer;
	private boolean mHasParameters;
	public URLBuilder(String sbase) 
	{
		mBuffer = new StringBuffer(sbase);
		mHasParameters = false;
	}
	public void addParameter(String name, String value) 
	{
		if (mHasParameters == false) 
		{
			mBuffer.append('?');
			mHasParameters = true;
		}
		else
			mBuffer.append('&');
		mBuffer.append(name);
		mBuffer.append('=');
		mBuffer.append(value);
	}
	public String toString() 
	{
		return mBuffer.toString();
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -