Java – Diffie-Hellman加密 – 输出错误

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

如输出中所示,在密钥交换中使用与正常相同的prime和base生成2个密钥,并在生成密钥时交换公钥,但是它们不输出与我预期相同的值。

我对如何实现这种加密方法感到非常困惑,并且非常感谢某些方向。 我的总体目标是实现加密的SMS Android应用程序。

在此处输入图像描述
(截图无法捕捉a&b的基础和素数的整个长度)

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

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