2016-04-03 86 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