首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java - Diffie-Hellman加密-错误输出

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

Stack Overflow用户
提问于 2014-03-19 06:30:11
回答 1查看 1.2K关注 0票数 0

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

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

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

代码语言:javascript
复制
 (The screenshot was unable to capture the entire length of a & b's base & prime)
代码语言:javascript
复制
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());
EN

回答 1

Stack Overflow用户

发布于 2014-03-19 07:31:59

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22492417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档