【问题标题】:Java - Diffie-Hellman Encryption - Wrong OutputJava - Diffie-Hellman 加密 - 错误的输出
【发布时间】:2014-04-24 21:42:15
【问题描述】:

我正在尝试实施 Diffie-Hellman 密钥交换。我对如何使用生成的密钥有点困惑。

从输出中可以看出,在密钥交换中使用与正常相同的素数和基数生成 2 个密钥,并在生成密钥时交换公钥,但是它们输出的值与我预期的不同。

我对如何实现这种加密方法感到非常困惑,非常感谢您提供一些指导。我的总体目标是实现一个加密的 SMS Android 应用程序。


(截图无法捕捉到 a & b 的 base & prime 的全长)

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(512); // number of bits
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class); 

BigInteger p512 = dhSpec.getP();
BigInteger g512 = dhSpec.getG();

//A  
KeyPairGenerator akpg = KeyPairGenerator.getInstance("DiffieHellman");

DHParameterSpec param = new DHParameterSpec(p512, g512);
System.out.println("Prime: " + p512);
System.out.println("Base: " + g512);
akpg.initialize(param);
KeyPair kp = akpg.generateKeyPair();

//B
KeyPairGenerator bkpg = KeyPairGenerator.getInstance("DiffieHellman");

DHParameterSpec param2 = new DHParameterSpec(p512, g512);
System.out.println("Prime: " + p512);
System.out.println("Base: " + g512);
bkpg.initialize(param2);
KeyPair kp2 = bkpg.generateKeyPair();


KeyAgreement aKeyAgree = KeyAgreement.getInstance("DiffieHellman");
KeyAgreement bKeyAgree = KeyAgreement.getInstance("DiffieHellman");

aKeyAgree.init(kp.getPrivate());
bKeyAgree.init(kp2.getPrivate());

aKeyAgree.doPhase(kp2.getPublic(), true);
bKeyAgree.doPhase(kp.getPublic(), true);

//System.out.println("Alice Secret Key: " + aKeyAgree.generateSecret());
//System.out.println("Bob's Secret Key: " + bKeyAgree.generateSecret());

MessageDigest hash = MessageDigest.getInstance("SHA-256");

byte[] ASharedSecret = hash.digest(aKeyAgree.generateSecret());
byte[] BSharedSecret = hash.digest(bKeyAgree.generateSecret());

System.out.println("Alice's Shared Secret: " + ASharedSecret.toString());
System.out.println("Bob's Shared Secret: " + BSharedSecret.toString());

【问题讨论】:

  • 您可能首先希望在您的related question 的答案中查看链接到的信息。在低质量的示例中尝试诊断问题可能会带来更多麻烦。
  • 我尝试了实现示例,但它只生成基数、素数和指数

标签: java android public-key-encryption diffie-hellman


【解决方案1】:

byte[].toString() 不打印内容。试试 Arrays.toString()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2019-03-01
    • 2012-03-14
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多