Base64 Codieren/Decodieren

Billie

Erfahrenes Mitglied
Hellas!

Also, es geht um folgendes. Ich speichere ein Password in einer XML Datei. Damit nicht jeder sofort mit freien Auge das Passwort lesen kann, wollte ich eine einfache Base64 Codierung anwenden. Zuerst wollte ich eine eigene Klasse schreiben, aber dann bin ich auf die Klassen von Sun gestoßen...

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

Nur wieso finde ich zu diesen Java Klassen keinen Source-Code, Dokumentation oder etc. ? Ich habe zuerst geglaubt, die Klassen habe ich gar nicht. Aber tatsächlich, ich kann sie importieren und benutzen, finde aber niergends Referenzmaterial zu diesen Klassen - Warum? Warum sind diese Klassen nicht in der Standard Doku vorhanden?

Alles Liebe, Me

PS: Für Tip's zum Schreiben einer eigenen Base64 Klasse bin ich immer offen ;)
 
So, bin jetzt zwar fast den ganzen Tag daran gesessen, aber jetzt hab ich meine eigenen Funktionen geschrieben - just for fun. Wobei ich nicht weiß ob auch alles mit allem Funktioniert, also debugging gab es noch keines ;) Dafür ist es relativ Simple und verständlich, behaupte ich mal.

Java ist Allgemein nicht geeignet um Passwörter zu speichern, den auch wenn man wirklich harte Verschlüsselungen nimmt, ein einfacher Decompiler und das ganze Programm ist ein offenes Tor. Ich nehme Base64 einfach, damit ein leie nicht sofort das Passwort erkennt. Ein XML File ist schnell geöffnet und gelesen, aber mit Base64 beschäftigt sich doch nicht jeder Normalsterbliche. Außerdem werde ich in meinem Programm sowieso darauf hinweisen, wie es um die Passwortsicherheit steht.

Code:
    public String base64_encode(String s) {

        char[] base64Alphabet = new char[] {
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '='
        };

        int length = s.length();
        for( ; ((length * 8) % 3) != 0; length++);
        boolean[] msg = new boolean[length * 8];
        String enc_msg = "";

        for(int i = 0; i < s.length(); i++) {

            int t, j;
            int c = (int) s.charAt(i);

            for(t = 128, j = 0; t > 0; t = t / 2, j++) {

                if((c & t) != 0) msg[((i * 8) + j)] = true;
            }
        }

        for(int i = 0; i < (msg.length / 6); i++) {

            int t, j;
            int c = 0;

            for(t = 32, j = 0; t > 0; t = t / 2, j++) {

                if(msg[((i * 6) + j)]) c += t;
            }

            if(c == 0) c = 64;
            enc_msg += base64Alphabet[ c];
        }

        return new String(enc_msg);
    }


    public String base64_decode(String s) {

        short[] base64Table = new short[] {
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
            52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
            -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
            15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
            -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
            41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
        };

        boolean[] msg = new boolean[s.length() * 6];
        String dec_msg = "";

        for(int i = 0; i < s.length(); i++) {

            int t, j;
            short c = base64Table[(short) s.charAt(i)];
            if(s.charAt(i) == '=') c = 0;

            for(t = 32, j = 0; t > 0; t = t / 2, j++) {

                if((c & t) != 0) msg[(i * 6) + j] = true;
            }
        }

        for(int i = 0; i < (msg.length / 8); i++) {

            int t, j;

            char c = 0;

            for(t = 128, j = 0; t > 0; t = t / 2, j++) {

                if(msg[(i * 8) + j]) c += t;
            }

            dec_msg += c;
        }

        return dec_msg.trim();
    }
 
Zurück