Just nu i M3-nätverket
Gå till innehåll

Diffi Hellman keyexchange och trådproblem


onion

Rekommendera Poster

Tjena,

jag ska försöka förklara mitt problem så tydligt som möjligt =)

 

Det här är ett skolarbete som jag håller på med i australien. Titta följande länk för en kort beskrivning av klasserna som vi fick att arbeta med :

http://www.ee.usyd.edu.au/~mattb/2006/project/

 

Programmet är ett icq liknande med en client och en server. clienterna loggar in på servern får en egen tråd och ska sedan börja kummunicera med andra clienter via bla text meddelanden, man ser vem som är online osv.

 

Den biten fungerar bra. Nu tänkte jag göra det hela säkert och har inplementerat dh keyexchange till en början med mellan clienten och servern.

allt har gått bra och servern har hemligheten och clienten har hemligheten. Nu kommer mitt problem.

 

ända fram till nu har jag använt

 

inStream =commsSocket.getInputStream();

outStream= commsSocket.getOutputStream();

dataOut = new PrintWriter(outStream, true);

dataIn = new BufferedReader(new InputStreamReader(inStream));

 

för nyckelutbytet nu vill jag använda CipherInputStream istället och kryptera allt med hemligheten. då ropar jag på en metod som följande hos både clientens kommunikationsclass och servertrådens:

 

public void secureTransfers(){

try {

 

cos = new CipherOutputStream(outStream,eCipher);

cis = new CipherInputStream(inStream, dCipher);

isr = new InputStreamReader(cis);

 

 

dataOut = new PrintWriter(cos, true);

dataIn = new BufferedReader(isr);

 

System.out.print("secured");

} catch (Exception e) {

System.err.println("Connection terminated."+e);

System.exit(1);

}

}

 

det fungerar bra hos clienten, men hos servertråden får jag följande fel=

 

java.lang.NullPointerException

at javax.crypto.CipherInputStream.a(DashoA12275)

at javax.crypto.CipherInputStream.read(DashoA12275)

at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)

at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)

at sun.nio.cs.StreamDecoder.read(Unknown Source)

at java.io.InputStreamReader.read(Unknown Source)

at java.io.BufferedReader.fill(Unknown Source)

at java.io.BufferedReader.readLine(Unknown Source)

at java.io.BufferedReader.readLine(Unknown Source)

at StealthNetComms.recvPacket(StealthNetComms.java:214)

at StealthNetServerThread.run(StealthNetServerThread.java:215)

 

 

anropet till securetransfers metoden kommer från inuti run metoden i servertråden,

och StealthNetServerThread.java:215 hänvisar till början av samma run metod där den ropar på "StealthNetComms.java:214" metod som ligger och lyssnar med input.readLine()...

 

lite rörigt möjligtvis. Någon kanske förstod iaf =)

Jag vet inte heller om jag är helt ute och cycklar med hur man på bästa sätt implementerar en dh keyexchange.

 

Tacksam för alla svar

mvh Micke

 

 

 

 

 

 

 

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

  • 3 veckor senare...

Har tyvärr inte använt javax.crypto någonting men läste lite om det i APIn. Kolla så att du har initierat dCipher helt

The cipher must be fully initialized before being used by a CipherOutputStream
och att isr inte är null.

 

Kolla appendix F i Java Cryptograhpy Extension Reference Guide för att se hur nyckelutbytet i Diffie Hellman fungerar i java (ser rätt krångligt ut=)

http://java.sun.com/j2se/1.4.2/docs/api/index.html

 

 

Hoppas nått hjälpte dig

/marb

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...