Just nu i M3-nätverket
Jump to content

Diffi Hellman keyexchange och trådproblem


onion

Recommended Posts

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

 

 

 

 

 

 

 

 

 

 

 

 

Link to comment
Share on other sites

  • 3 weeks later...

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

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...