[JAVA] probleem met XOR versleuteling

Pagina: 1
Acties:

  • splat
  • Registratie: Juni 2000
  • Niet online
Ik ben bezig met een eenvoudige encryptie methode in java.
Het is bedoelt voor een chat-applicatie, en ik wil dus dat de gesprekken niet plain-text over het netwerk gaan.

De methode die ik nu heb werkt volgens het XOR principe.
Dit werkt opzich goed, alleen soms gaat het fout omdat na het toepassen van het XOR-masker het resultaat bijvoorbeeld een LF of een CR is (of een ander onzichtbaar teken).
Als ik deze string dan wil verzenden over het netwerk dan gaat er iets fout. Als er in die gecodeerde string bijvoorbeeld een LF zit, dan krijg ik die na het decrypten bij de Client als nog te zien, en het originele teken is verdwenen.


Mijn vraag is dus:
Hoe verzend ik de versleutelde string wel goed over het netwerk?
Of moet ik op een andere manier versleutelen zodat ik alleen leesbare tekens krijg.. en hoe kan ik dat doen?

Ik heb al behoorlijk wat gezocht, maar ik vind eigenlijk alleen encryptie methodes die Des of Blowfish oid gebruiken, en ik wil het graag zo eenvoudig mogelijk houden.
Dus ik hoop dat het met XOR of iets vergelijkbaars ook op te lossen is.

Verwijderd

Je probleem wordt veroorzaakt omdat je de strings niet binair overstuurd waardoor \n omgezet wordt naar twee karakters en eventueel je hele string zelfs in unicode... maar dat weet ik niet, daarvoor zou je in de documentatie moeten kijken.

Je kan van je strings een byte array krijgen. Met de binaire readers-writers/streams kan je deze byte array oversturen. Na je XOR operatie kan je van de byte array weer een string maken.

  • Dezjay
  • Registratie: Oktober 1999
  • Laatst online: 19-08 15:16
Kun je misschien een stukje van de verzendcode laten zien? Want ik denk dat je de verkeerde Streams gebruikt.

  • splat
  • Registratie: Juni 2000
  • Niet online
Bedankt voor jullie reacties. Ik ben nu de encryptiemethode zo aan het aanpassen dat de string wordt omgezet naar een byte array.
En mijn verzendmethode in de chatapplicatie zal ik daar voor aanmoeten passen denk ik.
Ik gebruik nu dit (is niet complete code, alleen relevante delen):

Java:
1
2
3
4
5
6
7
8
9
10
11
12
ServerSocket s = new ServerSocket(2305);
Socket socket = s.accept();

PrintWriter out
          = new PrintWriter(
                new OutputStreamWriter(
                    socket.getOutputStream()));

BufferedReader in
          = new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream()));


Ik neem aan dat ik deze dan moet vervangen. Moet ik FileInputStream en FileOutputStream daarvoor gebruiken?

  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 14:46
splat schreef op 20 september 2003 @ 12:52:
Ik ben bezig met een eenvoudige encryptie methode in java.
Het is bedoelt voor een chat-applicatie, en ik wil dus dat de gesprekken niet plain-text over het netwerk gaan.

De methode die ik nu heb werkt volgens het XOR principe.
Dit werkt opzich goed, alleen soms gaat het fout omdat na het toepassen van het XOR-masker het resultaat bijvoorbeeld een LF of een CR is (of een ander onzichtbaar teken).
Niet weer he... :/

Gebruik NOOIT een 'xor' algoritme als cipher. Het is zo onveilig als de pest in vrijwel al z'n toepassingen uitgezonderd minimale obscurity.

Zoek een goed cipher op dat welbekend is en hang dat er tussen. Het gebruik is normaal gesproken niet ingewikkelder dan een 'xor' zeker niet als je een streamcipher gebruikt (wat iets ingewikkelder is om veilig te gebruiken dan een blockcipher overigens).