Java-Diffie Hellman加密-输出错误
我正在尝试实现Diffie-Hellman密钥交换。我有点困惑,一旦生成密钥,如何使用它 从输出中可以看出,这两个密钥是使用与密钥交换中正常相同的素数和基数生成的,并且在生成密钥时使用公钥,但是它们输出的值与我预期的值不同 我对如何实现这种加密方法感到非常困惑,如果能提供一些指导,我将不胜感激。我的总体目标是实现一个加密的SMS Android应用程序Java-Diffie Hellman加密-输出错误,java,android,public-key-encryption,diffie-hellman,Java,Android,Public Key Encryption,Diffie Hellman,我正在尝试实现Diffie-Hellman密钥交换。我有点困惑,一旦生成密钥,如何使用它 从输出中可以看出,这两个密钥是使用与密钥交换中正常相同的素数和基数生成的,并且在生成密钥时使用公钥,但是它们输出的值与我预期的值不同 我对如何实现这种加密方法感到非常困惑,如果能提供一些指导,我将不胜感激。我的总体目标是实现一个加密的SMS Android应用程序 (截图无法捕获a&b的base&prime的整个长度) 字节[]。toString()不打印内容。请尝试Arrays.toString()。您
(截图无法捕获a&b的base&prime的整个长度)
字节[]。toString()不打印内容。请尝试Arrays.toString()。您可能首先希望查看您计算机上答案中链接的信息。在一个低质量的示例中尝试和诊断问题可能会遇到更多麻烦。我尝试了实现示例,但它只生成基、素数和指数
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());