如何在Java中结合私钥和公钥来共享秘密

Wudong :

我正在阅读有关公共密钥公共密钥密码学的Wikipedia(http://en.wikipedia.org/wiki/Public-key_cryptography),其中说:

在Diffie-Hellman密钥交换方案中,每一方都生成一个公共/私有密钥对并分发该公共密钥...在获得彼此的公共密钥的真实副本之后,Alice和Bob可以离线计算共享的秘密。共享机密可以用作例如对称密码的密钥。

我想知道如何在Java中实现这一目标?即,给定任意的公钥和任意的私钥,如何从中生成共享秘密?

为了更清楚一点:

爱丽丝有一个公钥/私钥对key_pair_alice

鲍勃有一个公钥/私钥对key_pair_bob

假设我的理解是正确的,应该有一个Combine_keys()方法,以便:

combine_keys(key_pair_alice.private, key_pair_bob.public) == 
    combine_keys(key_pair_alice.public, key_pair_bob.private) 

我的问题是如何在Java中实现Combine_keys()方法。

谢谢。

Wudong :

经过研究,我提出了使用Java的加密软件包的解决方案。

 public static void main(String[] args) {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH");
AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator
    .getInstance("DH");
paramGen.init(1024);

// Generate the parameters
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec) params
    .getParameterSpec(DHParameterSpec.class);

keyGen.initialize(dhSpec);

KeyPair alice_key = keyGen.generateKeyPair();
KeyPair bob_key = keyGen.generateKeyPair();

SecretKey secret_alice = combine(alice_key.getPrivate(),
    bob_key.getPublic());

SecretKey secret_bob = combine(bob_key.getPrivate(),
    alice_key.getPublic());

System.out.println(Arrays.toString(secret_alice.getEncoded()));
System.out.println(Arrays.toString(secret_bob.getEncoded()));
}

private static SecretKey combine(PrivateKey private1,
    PublicKey public1)  {
KeyAgreement ka = KeyAgreement.getInstance("DH");
ka.init(private1);
ka.doPhase(public1, true);
SecretKey secretKey = ka.generateSecret("DES");
return secretKey;
}

最后的sysout显示alice和bob现在共享相同的秘密。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章