我有一个为传入的用户数组生成密钥对的函数(使用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 =
{"alisy@tcd.ie","yimk@tcd.ie","bachas@tcd.ie","tannerh@tcd.ie"};
ArrayList<User> usrz= generateUserKeys(users);
Iterator<User> itr = usrz.iterator();
while(itr.hasNext())
{
System.out.println(itr.next().getUserName());
}
我收到的输出是
tannerh@tcd.ie
tannerh@tcd.ie
tannerh@tcd.ie
tannerh@tcd.ie
答案 0 :(得分:0)
我没有在您的generateUserKeys方法代码中看到任何问题。可能User类不正常,你是否在User类中将用户名值设置为“tannerh@tcd.ie”?
其他System.out.println(...)行的结果是什么?它应该四次打印“用户名是:tannerh@tcd.ie”。
答案 1 :(得分:0)
我尝试按原样运行它,显然我在用户或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 = { "alisy@tcd.ie", "yimk@tcd.ie", "bachas@tcd.ie", "tannerh@tcd.ie" };
ArrayList<User> usrz = generateUserKeys(users);
Iterator<User> itr = usrz.iterator();
while (itr.hasNext()) {
System.out.println(itr.next().getUserName());
}
}
}