我有一个像这样的 Diffie-Hellman 安全类:
public class AESSecurityCap {
private PublicKey publicKey;
KeyAgreement keyAgreement;
byte[] sharedsecret;
AESSecurityCap() {
makeKeyExchangeParams();
}
private void makeKeyExchangeParams() {
KeyPairGenerator kpg = null;
try {
kpg = KeyPairGenerator.getInstance("EC");
kpg.initialize(128);
KeyPair kp = kpg.generateKeyPair();
publicKey = kp.getPublic();
keyAgreement = KeyAgreement.getInstance("ECDH");
keyAgreement.init(kp.getPrivate());
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
}
}
public void setReceiverPublicKey(PublicKey publickey) {
try {
keyAgreement.doPhase(publickey, false); // <--- Error on this line
sharedsecret = keyAgreement.generateSecret();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
}
并实现了这个类:
public class Node extends AESSecurityCap {
}
有时我需要重新初始化 DH keyAgreement:
public class TestMainClass {
public static void main(String[] args) {
Node server = new Node();
Node client = new Node();
server.setReceiverPublicKey(client.getPublicKey());
client.setReceiverPublicKey(server.getPublicKey());
// My problem is this line ,
// Second time result exception
server.setReceiverPublicKey(client.getPublicKey());
}
}
有没有办法多次重新初始化ECDH KeyAgreement?
这是我的测试用例:
客户端初始化DH并生成公钥。
客户端将公钥发送到服务器。
服务器用客户端密钥初始化DH并生成自己的公钥并生成共享密钥。
服务器将公钥发送给客户端。
客户端使用服务器公钥生成共享密钥。在此步骤中,客户端和服务器具有公钥和共享秘密。
我的问题是客户端断开连接()和 KeyAgreement 由单例对象初始化,并且不会第二次重新初始化。
有时我需要做这个课题。
请指导我解决这个问题。
Qyouu
相关分类