0
Diffie-Hellman 키 교환을 구현하려고합니다. 한 번 생성 된 비밀 키를 사용하는 방법과 약간 혼동 스럽습니다.Java - Diffie-Hellman 암호화 - 잘못된 출력
출력에서 볼 수 있듯이 키 교환에서 평범한 것과 동일한 기본 값 &을 사용하여 2 개의 비밀 키가 생성되고 비밀 키를 생성 할 때 공개 키를 교환하지만 예상 한 것과 동일한 값을 출력하지는 않습니다 .
이 암호화 방법을 구현하는 방법과 매우 혼란스러워지고 어떤 방향으로 인해 매우 감사 할 것입니다. 이를위한 전반적인 목표는 암호화 된 SMS Android 애플리케이션을 구현하는 것입니다.
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());
먼저 [관련 질문] (http://stackoverflow.com/a/22483706/616460)에서 대답과 연결된 정보를 확인하십시오. 품질이 낮은 예제에서 문제를 진단하고 진단하는 것보다 더 많은 문제가있을 수 있습니다. –
구현 예제를 시도했지만 기본, 소수 & 지수 만 생성합니다. –