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

📄 logindialog.java

📁 java写的qq代码实现qq的部分功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        });        
        // 密码框的输入事件
        text.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if(e.character == SWT.CR) {
                    doOk();
                }
            }
        });
        // 密码框的改变事件
        text.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent e) {
				changed = true;
			}        		
    	});        
    }

    private byte[] getTrianglePasswordKey(String pass) {
        byte[] b = Util.doMD5(Util.doMD5(pass.getBytes()));
        return getTrianglePasswordKey(b);
    }
    
    private byte[] getTrianglePasswordKey(byte[] passwordKey) {
        return Util.doMD5(new String(Base64.encode(passwordKey)).getBytes());
    }
    
    /**
     * 用户按了登陆按钮时调用这个方法
     */
    private void doOk() {        
        ok = true;
        // 保存当前输入
        saveInput();
        // 得到登陆历史信息文件对象,如果不存在,创建一个
        File loginHistory = new File(LumaQQ.LOGIN_HISTORY);
        if(!ConfigHelper.checkLoginHistoryFile(loginHistory)) return;
        // 检查是否当前登陆是新的记录
        Login login = ConfigHelper.findLogin(logins, combo.getText());
        if(login == null) {
	        // 如果没有,把新的登陆信息加入
	        login = new LoginImpl();
	        logins.getLoginList().add(login);
	        // 排序所有的登陆信息,按照QQ号从小到大排
	        Collections.sort(logins.getLoginList(), new QQNumberComparator());    
        } 
        // 设置登陆信息
        setLoginValue(login);
        // 修改最后一次登陆的qq号信息
        logins.setLastLogin(combo.getText());
        // 写入文件
        try {
            logins.marshal(loginHistory);
        } catch (IOException e) {
            log.error("登陆历史信息写入失败,本次登陆将不记载");
        }
        
        dialog.close();
    }
    
    /**
     * 把当前信息存入Login对象中
     * @param login Login对象
     */
    private void setLoginValue(Login login) {
        /*
         * 目前我采用了一个临时的办法,对于没有选择记住密码的人,把它的md5key做了base64之后
         * 再做一次md5,再来一次base64,这样的话应该就安全了,即时它把字符串用base64解密
         * 也没用了,但是对于我比较密码还是有用,就是在修改个人信息的时候那个密码,就是
         * 那个地方还要比较一下密码。
         * 不过,对付暴力破解并没有用,QQ是做了几十万次的MD5来保存密码,我不想做那么多
         * 次,Java做不来那么多次,写JNI又懒的动手,就这样吧 
         */
        login.setQq(combo.getText());
        login.setRememberPassword(String.valueOf(rememberPassword));
        login.setLoginHidden(String.valueOf(loginHidden));
        if(rememberPassword)
            login.setPassword(new String(Base64.encode(md5pwd)));
        else
        	login.setPassword(new String(Base64.encode(getTrianglePasswordKey(md5pwd))));
    }
    
    /**
     * 初始化控件的值
     */
    private void initValue() {
    	// 检查配置文件,如果不存在则创建一个
    	File loginHistory = new File(LumaQQ.LOGIN_HISTORY);
    	if(!ConfigHelper.checkLoginHistoryFile(loginHistory)) return;
        // 读入登陆信息文件
    	logins = ConfigHelper.loadLoginHistory(loginHistory);
    	if(logins == null)
    	    return;
        // 得到上一次登陆的人的历史信息
        Login login = ConfigHelper.findLogin(logins, logins.getLastLogin());
        // 把所有的QQ号都加到combo里面
        addAllQQ();
        // 检查login,不应该为null,如果为null了,那文件有问题,采用第一项login
        if(login == null) {
            log.warn("登陆历史信息文件有错误");
            List list = logins.getLoginList();
            if(list == null || list.size() == 0) return;
            login = (Login)list.get(0);
        }
        // 设置初始值
        setInitValue(login);
    }    
    
    /**
     * 把所有的QQ号都加到combo里面
     */
    private void addAllQQ() {
        List list = logins.getLoginList();
        Iterator iter = list.iterator();
        while(iter.hasNext()) {
            Login l = (Login)iter.next();
            combo.add(l.getQq());
        }
    }
    
    /**
     * 设置初始值
     * @param login Login对象
     */
    private void setInitValue(Login login) {
        combo.setText(login.getQq());
        chkRemember.setSelection(login.getRememberPassword().equalsIgnoreCase("true"));
        chkHidden.setSelection(login.getLoginHidden().equalsIgnoreCase("true"));
        if(chkRemember.getSelection()) {
            text.setText("xxxxxxxx");
            md5pwd = Base64.decode(login.getPassword().toCharArray());
        } else {
            text.setText("");
            md5pwd = new byte[16];
        }
        changed = false;
    }

    /**
     * 保存输入结果
     */
    private void saveInput() {
        rememberPassword = chkRemember.getSelection();
        loginHidden = chkHidden.getSelection();
        qqNum = Util.getInt(combo.getText(), 10001);
        if(changed)
        	md5pwd = Util.doMD5(Util.doMD5(text.getText().getBytes()));
        else if(md5pwd == null)
            md5pwd = Util.doMD5(Util.doMD5("".getBytes()));
    }
    
	/**
	 * 打开对话框
	 */
	public boolean open()	{
	    // create dialog
	    Shell parent = getParent();
	    Display display = parent.getDisplay();
		dialog = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.MIN);
		// init child controls
		initLayout(dialog);
		// 初始化控件的值
		initValue();
		// init event listeners
		initListeners(dialog);
		// set title and image
		dialog.setImage(icons.getImage(IconHolder.icoQQ));
		dialog.setText(LumaQQ.getString("login.title"));
		// set dialog to center of screen
		dialog.pack();
		Rectangle dialogRect = dialog.getBounds();
		Rectangle displayRect = display.getBounds();
		dialog.setLocation((displayRect.width-dialogRect.width)/2, (displayRect.height-dialogRect.height)/2);
		// 设置密码框获得焦点
		text.setFocus();
		combo.setSelection(new Point(0, 0));
		// event loop
		dialog.open();
		while(!dialog.isDisposed()) 
			if(!display.readAndDispatch()) 
			    display.sleep();
			
		return ok;
	}

    /**
     * @return Returns the loginHidden.
     */
    public boolean isLoginHidden() {
        return loginHidden;
    }
    
    /**
     * @return Returns the md5pwd.
     */
    public byte[] getMd5Password() {
        return md5pwd;
    }
    
    /**
     * @return Returns the qqNum.
     */
    public int getQQ() {
        return qqNum;
    }
    
    /**
     * 设置logo
     * 
     * @param lblLogo
     */
    private void setLogo(Label lblLogo) {
        Calendar c = Calendar.getInstance();
        if(c.get(Calendar.MONTH) == Calendar.MARCH)
            lblLogo.setImage(IconHolder.getInstance().getImage(IconHolder.bmpSmth));
        else if(c.get(Calendar.HOUR_OF_DAY) >= 22)
            lblLogo.setImage(IconHolder.getInstance().getImage(IconHolder.bmpLogin2));
        else
            lblLogo.setImage(IconHolder.getInstance().getImage(IconHolder.bmpLogin));
    }
    
    /**
     * @return Returns the rememberPassword.
     */
    public boolean isRememberPassword() {
        return rememberPassword;
    }
}

⌨️ 快捷键说明

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