[Java]IRCu Base64 encoden van IP-Adres

Pagina: 1
Acties:

  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
Ik ben bezig met het schrijven van een netwerkservice voor irc-netwerken. De huidige netwerken maken tegenwoordig gebruik van het P10/J10 protocol voor de verbindingen, wat onder andere inhoudt dat IP-adressen van clients niet meer als fulltext maar als base64 encoded over de lijn gaan om bijvoorbeeld dataverkeer te besparen.

Het verbinden van van de servers met elkaar (een netwerkservice moet namelijk eerst als server verbinden) gaat prima. Bij het toevoegen van de daadwerkelijke client (zodat er ook wat te zien is voor de gebruikers) ben ik tegen een probleem aangelopen: het coderen van deze ip-adressen.

code:
1
2
3
Een voorbeeld wat ik heb gevonden:

192.168.0.1 -> c0a80001 -> DAqAAB


De eerste waarde is natuurlijk het ip-adres, de tweede het ip-adres in hexadecimalen.
De derde waarde is de waarde van het ip-adres in P10 base64. P10 gebruikt een ander soort alfabet, om ervoor te zorgen dat de waarden niet worden verward met mode-strings.

Ik weet dat de eerste drie tekens van de P10 base64 string (DAq dus) 192.168 voorstellen. Dit heb ik gecontroleerd door vanaf verschillende ip-adressen binnen het netwerk te verbinden, en alleen de laatste 3 tekens veranderden.

code:
1
2
3
4
5
6
7
======================================
{2} P10 BASE64
======================================
P10 protocol uses a base64 notation for numeric nicks, and for the IP parameter in the N token.
it uses the following set of 64 characters, in the sequence from 0 to 63:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789[]


Mijn probleem is dus: Hoe kom ik van ip-adressen naar de base64 versie van ditzelfde ip-adres? Ik ben druk aan het googelen geweest, en ook wat voorbeelden gevonden, maar zoals bijvoorbeeld deze: http://farhadi.ir/base64.html , geeft een totaal andere waarde dan ik verwacht, en kan ook de DAq niet terugvertalen naar hex/decimalen.

Ik kom er niet meer uit, heeft iemand zoiets misschien eerder gedaan? of een (wiskundig) voorbeeld bij de hand? Het zou mij geweldig helpen!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

base64 als in een getal, encoded met 64 als base ipv 10 (decimaal) of 16 (hexadecimaal), lijkt me. Met elk karakter in dat rijtje een bepaalde waarde.

Dus:

A = 0
B = 1
C = 2, etc. Zelfde idee als base16 maar dan uitgebreider.

[ Voor 41% gewijzigd door CyBeR op 17-09-2006 22:49 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
CyBeR schreef op zondag 17 september 2006 @ 22:48:
base64 als in een getal, encoded met 64 als base ipv 10 (decimaal) of 16 (hexadecimaal), lijkt me. Met elk karakter in dat rijtje een bepaalde waarde.

Dus:

A = 0
B = 1
C = 2, etc. Zelfde idee als base16 maar dan uitgebreider.
Dat klopt. Als je DAq 'terugrekent' dan is het 3042. Ik kom met geen mogelijkheid op 3042 door te rekenen met alleen 192 en 168, of de hexadecimale equivalenten daaran :?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:25

crisp

Devver

Pixelated

    11000000 10101000 00000000 00000001
dec 192      168      0        1
hex c0       a8       00       01

    11 000000 101010 000000 000000 000001
b64 D  A      q      A      A      B
;)

Intentionally left blank


  • MindStorm
  • Registratie: Juli 2002
  • Laatst online: 16-01-2024
@crisp thanks! ik ben er nu uit :)