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

📄 pwmanager.java

📁 KeePass for J2ME is a J2ME port of KeePass Password Safe, a free, open source, light-weight and easy
💻 JAVA
字号:
/*KeePass for J2MECopyright 2007 Naomaru Itoi <nao@phoneid.org>This file was derived from Java clone of KeePass - A KeePass file viewer for JavaCopyright 2006 Bill Zwicky <billzwicky@users.sourceforge.net>This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/package org.phoneid.keepassj2me;// Javaimport java.io.IOException;import java.util.Vector;// Bouncy Castleimport org.bouncycastle1.util.encoders.Hex;import org.bouncycastle1.crypto.*;import org.bouncycastle1.crypto.generators.*;import org.bouncycastle1.crypto.digests.*;import org.bouncycastle1.crypto.params.*;import org.bouncycastle1.crypto.paddings.*;import org.bouncycastle1.crypto.modes.*;import org.bouncycastle1.crypto.engines.*;import org.bouncycastle1.util.*;import org.bouncycastle1.util.encoders.*;/** * @author Naomaru Itoi <nao@phoneid.org> * @author Bill Zwicky <wrzwicky@pobox.com> * @author Dominik Reichl <dominik.reichl@t-online.de> */public class PwManager {    // Constants    // private static final int PWM_SESSION_KEY_SIZE = 12;    // DB sig from KeePass 1.03     static final int PWM_DBSIG_1               = 0x9AA2D903;    // DB sig from KeePass 1.03    static final int PWM_DBSIG_2               = 0xB54BFB65;    // DB sig from KeePass 1.03    static final int PWM_DBVER_DW              = 0x00030002;    static final int PWM_FLAG_SHA2             = 1;    static final int PWM_FLAG_RIJNDAEL         = 2;    static final int PWM_FLAG_ARCFOUR          = 4;    static final int PWM_FLAG_TWOFISH          = 8;    static final int ALGO_AES                  = 0;    static final int ALGO_TWOFISH              = 1;    // Descriptive name for database, used in GUI.    public  String   name = "KeePass database";      // Special entry for settings    public PwEntry   metaInfo;    // all entries    public Vector entries = new Vector();    // all groups    public Vector groups = new Vector();    // Last modified entry, use GetLastEditedEntry() to get it    // PwEntry          lastEditedEntry        = null;    // Pseudo-random number generator    //CNewRandom m_random;    // Used for in-memory encryption of passwords    // private byte     sessionKey[]           = new byte[PWM_SESSION_KEY_SIZE];    // Master key used to encrypt the whole database    byte             masterKey[]            = new byte[32];    // Algorithm used to encrypt the database    int              algorithm;    int              numKeyEncRounds;    // root group    PwGroup rootGroup;    public void setMasterKey( String key ) {	if( key == null || key.length() == 0 )	    throw new IllegalArgumentException( "Key cannot be empty." );		SHA256Digest md = new SHA256Digest();	md.update( key.getBytes(), 0, key.getBytes().length );	masterKey = new byte[md.getDigestSize()];	md.doFinal(masterKey, 0);    }    /*  //  // Erase all members and buffers, then null pointers.  // Ensures no memory (that we control) contains leftover keys.  //  void secureErase() {    // TODO finish this!  }    */    public Vector getGrpRoots() {	int target = 0;	Vector kids = new Vector();	for( int i=0; i < groups.size(); i++ ) {	    PwGroup grp = (PwGroup)groups.elementAt( i );	    if( grp.level == target )		kids.addElement( grp );	}	return kids;    }    public Vector getGrpChildren( PwGroup parent ) {	int idx = groups.indexOf( parent );	int target = parent.level + 1;	Vector kids = new Vector();	while( ++idx < groups.size() ) {	    PwGroup grp = (PwGroup)groups.elementAt( idx );	    if( grp.level < target )		break;	    else		if( grp.level == target )		    kids.addElement( grp );	}	return kids;    }    public Vector getEntries( PwGroup parent ) {	Vector kids = new Vector();	/*for( Iterator i = entries.iterator(); i.hasNext(); ) {	    PwEntry ent = (PwEntry)i.next();	    if( ent.groupId == parent.groupId )		kids.add( ent );		}*/	for (int i=0; i<entries.size(); i++) {	    PwEntry ent = (PwEntry)entries.elementAt(i);	    if( ent.groupId == parent.groupId )		kids.addElement( ent );	}	return kids;    }  public String toString() {    return name;  }    public void addGroup(Object group)    {	groups.addElement(group);    }        public void addEntry(Object entry)    {	entries.addElement(entry);    }        public void constructTree(PwGroup currentGroup)    {	// I'm in root	if (currentGroup == null) {	    rootGroup = new PwGroup();			    Vector rootChildGroups = getGrpRoots();	    rootGroup.childGroups = rootChildGroups;	    rootGroup.childEntries = new Vector();	    for (int i=0; i<rootChildGroups.size(); i++) {		((PwGroup)rootChildGroups.elementAt(i)).parent = rootGroup;		constructTree((PwGroup)rootChildGroups.elementAt(i));	    }	    return;	}	// I'm in non-root	// get child groups	currentGroup.childGroups = getGrpChildren(currentGroup);	currentGroup.childEntries = getEntries(currentGroup);	// set parent in child entries	for (int i=0; i<currentGroup.childEntries.size(); i++) {	    ((PwEntry)currentGroup.childEntries.elementAt(i)).parent = currentGroup;	}	// recursively construct child groups	for (int i=0; i<currentGroup.childGroups.size(); i++) {	    ((PwGroup)currentGroup.childGroups.elementAt(i)).parent = currentGroup;	    constructTree((PwGroup)currentGroup.childGroups.elementAt(i));	}	return;    }}

⌨️ 快捷键说明

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