2016-04-03 20 views
0

Ich habe eine Funktion, die Paare von Schlüsseln für ein Array von Benutzern generiert (mit RSA-Algorithmus), es scheint, die Schlüssel für jeden Benutzer ordnungsgemäß generiert und sie einer Array-Liste hinzugefügt. Wenn ich jedoch versuche, die Ausgabe zu drucken, scheint nur das letzte Element gedruckt zu werden. Ich kann nicht herausfinden, was ich falsch mache.Arraylist druckt nur zuletzt hinzugefügtes Element

Hier ist die Funktion, die die Schlüssel generiert und eine Arraylist zurückgibt: - Sie nimmt ein String-Array von Benutzern als Parameter.

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; 

} 

Hier ist, wie ich es bin Tests: -

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()); 

} 

Der Ausgang ich empfangen habe, ist

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

Können wir den Benutzer Array sehen? –

+0

Kannst du deine gesamte Ausgabe posten? – Natecat

+0

Hier ist der Array der Benutzercodes 'String [] users = {"[email protected]", "[email protected]", "[email protected]", "tannerh @ tcd.ie "}; –

Antwort

0

ich habe keine Probleme gesehen in Ihrem generateUserKeys Methodencode . Wahrscheinlich ist die Benutzerklasse nicht in Ordnung, haben Sie den Benutzernamen in der Benutzerklasse als "[email protected]" angegeben?

Was ist das Ergebnis der anderen System.out.println (...) Zeilen? Es sollte auch viermal "Benutzername ist: [email protected]" gedruckt werden.

0

Ich habe versucht, es so zu laufen, wie es ist, offensichtlich gibt es einige Annahmen, die ich in Bezug darauf gemacht habe, welcher Code für Benutzer oder KeyPairGenerator verwendet wurde. Hier ist mein Code und ich habe nicht die Art von Ausgabe erhalten, die in dem Problem beschrieben wurde. Kannst du mir helfen zu sehen, ob es mit statischem oder etwas anderem zu tun hat? @PaulBoddington - Bitte behandle das nicht als Beurteilung dessen, was du bereits gesagt hast. Ich poste dies auf der Grundlage einer Prüfung, die ich gemacht habe. Vorbehalt: Ich kann hier falsch liegen.

Source Code:

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

Ich lese gerade Ihren Beitrag und sehe, dass Sie tatsächlich vorgeschlagen haben, das Entfernen von statischen aus User-Klasse-Feld (ohne zu sehen, was codiert wurde) :) Nun, sieht aus wie ich nicht einmal davon ausgegangen, dass das ist, was ich tun würde. Das erklärt, warum ich nicht den gleichen Output wie Hassan bekommen habe. Keine weiteren Aktionen erforderlich. Lassen Sie mich den Code hier lassen, um einen volleren Code zu haben. – Learner

Verwandte Themen