2014-03-18 4 views
0

Diffie-Hellman 키 교환을 구현하려고합니다. 한 번 생성 된 비밀 키를 사용하는 방법과 약간 혼동 스럽습니다.Java - Diffie-Hellman 암호화 - 잘못된 출력

출력에서 ​​볼 수 있듯이 키 교환에서 평범한 것과 동일한 기본 값 &을 사용하여 2 개의 비밀 키가 생성되고 비밀 키를 생성 할 때 공개 키를 교환하지만 예상 한 것과 동일한 값을 출력하지는 않습니다 .

이 암호화 방법을 구현하는 방법과 매우 혼란스러워지고 어떤 방향으로 인해 매우 감사 할 것입니다. 이를위한 전반적인 목표는 암호화 된 SMS Android 애플리케이션을 구현하는 것입니다.

enter image description here

은 (스크린 샷은 & 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()); 
+1

먼저 [관련 질문] (http://stackoverflow.com/a/22483706/616460)에서 대답과 연결된 정보를 확인하십시오. 품질이 낮은 예제에서 문제를 진단하고 진단하는 것보다 더 많은 문제가있을 수 있습니다. –

+0

구현 예제를 시도했지만 기본, 소수 & 지수 만 생성합니다. –

답변

2

바이트 []. toString()이 내용을 인쇄하지 않습니다. Arrays.toString()을 사용해보십시오.