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

Diffi Hellman keyexchange och trådproblem

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

 

 

 

 

 

 

 

 

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...