2016-04-03 89 views
0

我有一個函數可以爲傳入的用戶數組生成密鑰對(使用RSA算法),它似乎會爲每個用戶正確生成密鑰並將它們添加到數組列表中。但是,當我試圖打印輸出時,它似乎只打印最後一個元素。似乎無法弄清楚我做錯了什麼。Arraylist只打印最後添加的元素

這是生成密鑰並返回一個數組列表的函數: - 它將用戶的字符串數組作爲參數。

public static ArrayList<User> generateUserKeys(String [] users){ 

    ArrayList <User> usrs = new ArrayList<User>(); 

    KeyPair k; 

    for (int i=0;i<users.length;i++) 
    { 

     k=generateKeyPair(); 

     usrs.add(new User(users[i],k.getPublic(),k.getPrivate())); 
     System.out.println("User Name is :"+ usrs.get(i).getUserName()); 
     System.out.println("Public Key is :"+ usrs.get(i).getPublicKey()); 
     System.out.println("Private Key is :" + usrs.get(i).getPrivateKey()); 



    } 


    return usrs; 

} 

這裏是我正在測試它: -

String [] users = 
{"[email protected]","[email protected]","[email protected]","[email protected]"}; 

ArrayList<User> usrz= generateUserKeys(users); 
Iterator<User> itr = usrz.iterator(); 

while(itr.hasNext()) 
{ 
    System.out.println(itr.next().getUserName()); 

} 

我收到的輸出是

[email protected] 
[email protected] 
[email protected] 
[email protected] 
+0

我們可以看到用戶的陣列? –

+0

您可以發佈您的所有輸出 – Natecat

+0

以下是用戶代碼String [] users = {「[email protected]」,「[email protected]」,「[email protected]」,「tannerh @ tcd.ie「}; –

回答

0

我haven't看到你的generateUserKeys方法代碼的任何問題。用戶類可能不正常,您是否在User類中將用戶名值設置爲「[email protected]」?

其他System.out.println(...)行的結果是什麼?它也應該打印「用戶名是:[email protected]」四次。

0

我試着按原樣運行它,很明顯,我根據User或KeyPairGenerator使用的代碼做了幾個假設。這是我的代碼,我沒有得到問題中描述的那種輸出。你能幫我看看它是否與靜態或其他東西有關嗎? @PaulBoddington - 請不要把它當作判斷你已經說過了什麼。我發佈這個基於我做的測試。警告:我可能在這裏錯了。

源代碼:

import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.NoSuchAlgorithmException; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.util.ArrayList; 
import java.util.Iterator; 

class User { 
    private String userName; 
    private PublicKey pubKey; 
    private PrivateKey privKey; 

    public User(String string, PublicKey public1, PrivateKey private1) { 
     userName = string; 
     pubKey = public1; 
     privKey = private1; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public String getPublicKey() { 
     return pubKey.toString(); 
    } 

    public String getPrivateKey() { 
     return privKey.toString(); 
    } 
} 

public class RSAKeyGenExample { 

    public static ArrayList<User> generateUserKeys(String[] users) throws NoSuchAlgorithmException { 
     ArrayList<User> usrs = new ArrayList<User>(); 

     KeyPair k; 
     KeyPairGenerator keyGen = null; 
     keyGen = KeyPairGenerator.getInstance("RSA"); 

     for (int i = 0; i < users.length; i++) { 
      k = keyGen.generateKeyPair(); 

      usrs.add(new User(users[i], k.getPublic(), k.getPrivate())); 
      System.out.println("User Name is :" + usrs.get(i).getUserName()); 
      System.out.println("Public Key is :" + usrs.get(i).getPublicKey()); 
      System.out.println("Private Key is :" + usrs.get(i).getPrivateKey()); 
     } 
     return usrs; 
    } 

    public static void main(String[] args) throws NoSuchAlgorithmException { 
     String[] users = { "[email protected]", "[email protected]", "[email protected]", "[email protected]" }; 

     ArrayList<User> usrz = generateUserKeys(users); 

     Iterator<User> itr = usrz.iterator(); 
     while (itr.hasNext()) { 
      System.out.println(itr.next().getUserName()); 
     } 
    } 
} 

+0

我剛剛重讀你的文章,看到你實際上建議從用戶類字段中刪除靜態(甚至沒有看到編碼):)看起來好像我甚至沒有認爲我會這樣做。這就解釋了爲什麼我沒有得到與哈桑相同的產出。無需採取進一步行動。讓我在這裏留下代碼以獲得更完整的代碼。 – Learner