----------------------------------------------------------------
BEFORE YOU POST, search the faq at <http://java.apache.org/faq/>
WHEN YOU POST, include all relevant version numbers, log files,
and configuration files. Don't make us guess your problem!!!
----------------------------------------------------------------
Hi,
The question was how to get the User:password out of the
"Basic sjuydamuwrtwye="
Here is a little method I wrote: (comments in german, sorry)
it works for me, are there better solutions??
//
// Authorization aus dem http-header in Klartext wandeln
//
private String getAuth( String auth, PrintWriter toClient )
{
if (auth==null) { // Notausgang falls kein Authorization da ist...
return ":";
}
int detable[] = { // ASCII-Tabelle fuer base64 dekodierung
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0..15
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //16..31
0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63, // 32..47
52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0, // 48..63
0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, // 64..79
15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0, // 80-95
0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, // 96..111
41,42,43,44,45,46,47,48,49,50,51,0,0,0,0,0 // 112..127
};
long x;
int pp,px;
char ax[]=new char[auth.length()];// ...laenger als noetig
if (auth.startsWith("Basic")) { // ich kann nur Basic
auth=auth.substring(6); // 'Basic ' abschneiden...
char p[]=auth.toCharArray(); // restlichen String zum char array wandeln
// Nach "Basic " beginnt der kodierte Authentication String
// Der String ist nach dem Base64 Verfahren kodiert.
// Es sind drei Bytes aus dem Originalstring zu vier
// Zeichen (aus 64 ==> 6bit ) kodiert.
// Fuer jedes der 64 verwendeten Zeichen haben wir dessen
// Bit-Wert in der detable gespeichert (z.B. 'Z' entspr. 24
// also ist detable['Z'] = 24)
// Die vier erhaltenen Werte werden mit ihrer Wertigkeit (64^3...64^0)
// multipliziert und aufaddiert es entsteht ein 24bit langer Wert,
// der anschliessend durch maskieren und verschieben in 3 Bytes
// getrennt wird. Die Bytes werden nacheinander in ein char array
// abgespeichert.
// (!) Die Sonderbehandlung fuer das Stringende ist etwas ungeschickt
// eingebaut worden (noch verbesserungsfaehig!!):
// ein '=' am Schluss besagt, dass das letzte Byte aus dem
// Dreierblock nicht vorhanden war, ein '==' am Schluss besagt,
// dass die letzten beiden Bytes nicht vorhanden waren.
for (pp=0,px=0;pp<auth.length();) {
x= detable[p[pp++]]*64*64*64;
x+= detable[p[pp++]]*64*64;
x+= detable[p[pp++]]*64;
x+= detable[p[pp++]];
ax[px++]=(char)(byte)((x&0xff0000)>>16);
if (p[pp-2]!='=') ax[px++]=(char)(byte)((x&0xff00)>>8);
if (p[pp-1]!='=') ax[px++]=(char)(byte)(x&0xff);
}
} else {
toClient.println("<B>Passwort-Methode <em>" + auth
+ "</em> nicht unterstuetzt!</B><BR>" );
ax[0]=':'; //leeres User:Passwort-Paar
}
// wenn alles klappte:
return String.valueOf(ax).trim();
}
------------------------------------------------------------------------
Frank Rust Technische Universitaet Braunschweig
Tel.: +49 531 391 9525 Institut fuer Theoretische Informatik
Fax.: +49 531 391 9529 Fallersleber-Tor-Wall 22
email: [EMAIL PROTECTED] 38100 Braunschweig
--
--------------------------------------------------------------
Please read the FAQ! <http://java.apache.org/faq/>
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
Archives and Other: <http://java.apache.org/main/mail.html>
Problems?: [EMAIL PROTECTED]