将值附加到哈希表

时间:2013-12-21 05:49:20

标签: java android encryption hash

我正在实现一个加密解密应用程序。因为我正在使用哈希表来存储带有提示的加密值。虽然解密我需要获取哈希表值。但在这里我只得到一个密钥及其hash表中的值.allMessage()用于存储hashtable到file,getMessage()用于retriving.can任何人都可以帮我找到合适的解决方案。

提前致谢

用于将哈希表存储到文件

public boolean storeMessage(byte[] bt,String hint){
        boolean status=false;

    byte[][] valuePair=null;
    java.util.Set<String> set=null;
    java.util.Iterator<String> itr=null;
    ObjectOutputStream objOut=null;
    try {

        System.out.println("jhkj:"+ht);
        if(ht==null) 
        ht=new Hashtable<String, byte[]>();

        ht.put(hint, bt);

        keyPair=new String[ht.size()];
        valuePair=new byte[keyPair.length][1];

        set=ht.keySet();
        itr=set.iterator();
        int i=0;
        while(itr.hasNext()){
            keyPair[i]=itr.next();
            valuePair[i]=ht.get(keyPair[i]);
            i++;
        }

    if(!new java.io.File("store.db").exists()) 
        new java.io.File(path+ "/store.db").createNewFile();  


    objOut=new ObjectOutputStream(new FileOutputStream(path+ "/store.db",true));
    objOut.writeObject(keyPair);
    objOut.writeObject(valuePair);
    objOut.close();
    status=true;
    } catch (Exception e)
    {
    }
    finally{            
    }
    return status;
}

从文件中获取哈希表

java.util.Hashtable<String, byte[]> getMessage(){

    byte[][] valuePair=null;
    ObjectInputStream objIn=null;
    ht=new Hashtable<String, byte[]>();
    try{
        objIn=new ObjectInputStream(new FileInputStream(con.getFilesDir().getParentFile().getPath()+ "/store.db"));
        keyPair=(String[]) objIn.readObject();
        valuePair=(byte[][]) objIn.readObject();

        int i=0;
        while(i<keyPair.length){
            ht.put(keyPair[i], valuePair[i]);
            i++;
        }


    }
    catch(FileNotFoundException ex)
    {           
        ht=new Hashtable<String, byte[]>();
    }
    catch (Exception e) 
    {
        System.out.println(">>>>>>"+e);
    }
    finally{
        try {
            objIn.close();
        } catch (Exception e) 
        {
        }
    }
    System.out.println("hash table:"+ht);
    return ht;
}

1 个答案:

答案 0 :(得分:1)

每次存储哈希表时,首先应该获取当前存储的表,然后在存储之前为其添加新条目。

例如:

public boolean storeMessage(byte[] bt,String hint){
        boolean status=false;

    byte[][] valuePair=null;
    java.util.Set<String> set=null;
    java.util.Iterator<String> itr=null;
    ObjectOutputStream objOut=null;
    try {

        System.out.println("jhkj:"+ht);
        ht=getMessage();//<--Here you are trying to get current hashtable 
        if(ht==null) 
           ht=new Hashtable<String, byte[]>();

        ht.put(hint, bt);

        keyPair=new String[ht.size()];
        valuePair=new byte[keyPair.length][1];

        set=ht.keySet();
        itr=set.iterator();
        int i=0;
        while(itr.hasNext()){
            keyPair[i]=itr.next();
            valuePair[i]=ht.get(keyPair[i]);
            i++;
        }

    if(!new java.io.File("store.db").exists()) 
        new java.io.File(path+ "/store.db").createNewFile();  


    objOut=new ObjectOutputStream(new FileOutputStream(path+ "/store.db",true));
    objOut.writeObject(keyPair);
    objOut.writeObject(valuePair);
    objOut.close();
    status=true;
    } catch (Exception e)
    {
    }
    finally{            
    }
    return status;
}