You are not logged in.

  • Login

1

Monday, May 17th 2010, 11:57am

Verschlüsselung -> wozu base64_decode?

Hey Leute,


ich habe auf PHP.net eine kleine Funktion gefunden, die ein Passwort für eine Datenbank verschlüsseln soll.

Source code

1
2
3
4
5
6
<?php
//Function made by L2inside.org
function encrypt($v1,$v2=''){
    $token = md5(sha1(md5(base64_decode($v1.$v2)).$v2).$v1);
    return $token;
}?>

Wozu nimmt der da ein base64_decode? Hat das einen besonderen Vorteil?

Gruß,
Erasel
Latest blogs Latest blogs: Bloggen...

bitsnack

Unregistered

2

Monday, May 17th 2010, 12:56pm

Hi,

Das Base64_decode() bewirkt einfach die Dekodierung des Strings in Base64. ^^
Mit base64_encode() kannst du einen String verschleiern, mit base64_decode() dann wieder entschleiern. Als Verschlüsselung kann das aber nicht bezeichnet werden, schliesslich kann es jeder wieder ganz leicht Entschlüsseln.
Wieso der da es aber genutzt hat kann ich dir nicht wirklich sagen, ich gehe ja davon aus dass der als Parameter übergebene String kein base64-Code ist.

Um Passwörter für eine Datenbank zu verschlüsseln würde ich in etwa so eine Funktion nehmen:

PHP Quellcode

1
2
3
4
5
6
7
8
9
<?php
function encrypt($string)
{
$salt1 = 'o7awbt8ort8t84azt8t08c7t';
$salt2 = 'iouebrzocuzbrzavwriuctb4o78';
$salt3 = 'iuzbaeoiuabzoivwerztoivw';
 
return sha1(md5($salt1.$string.$salt2).$salt3);
}


greez

bitsnack

3

Monday, May 17th 2010, 1:04pm

Du kannst es ja einfach selber ausprobieren, dann siehst du warum.

PHP Quellcode

1
echo base64_decode("test");


;)

4

Monday, May 17th 2010, 4:05pm

Hey,

was ich sehe ist ein haufen Datensalat. Aber wozu? Er macht daraus ja wieder einen md5 am Ende...
Das macht es zwar uninteressant für Rainbowtables. Aber da ist das auch ausreichend:

Source code

1
sha1(sha1($pw.$salt)).$salt;

Ansonsten ist an der Funktion nichts sicherer als an meiner jetzigen.
Ich hatte noch die Überlegung, ob es für BruteForce eine größere Zeitberechnung in Anspruch nimmt, wenn man base64 mit verwendet...

Wahrscheinlich ist es aber einfach ein weiterer Schutz gegen Rainbowtables...

EDIT:
Ich habe gerade nochmal ein wenig mit base64 rum gespielt...

Source code

1
2
3
4
5
6
7
8
9
10
<?php
	$a = md5(base64_decode("a"));
	$b = md5(base64_decode("a"));
	$c = md5("");
	
	if($a == $b && $a == $c)
	{
		print "is it realy a supersecurepassword???";
	}
?>

Uuups...
Trifft in dem Fall nur zu, wenn man nur ein Zeichen hat -> aber es ist in meinen Augen auf alle fälle eine Schwäche...


Gruß,
Erasel
Latest blogs Latest blogs: Bloggen...

This post has been edited 1 times, last edit by "Erasel" (May 17th 2010, 4:20pm)


5

Monday, May 17th 2010, 7:16pm

Da gehts auch um den Einfallsreichtum.

Die Standardmethoden sind:

PHP Quellcode

1
2
3
4
5
6
7
md5();
sha1();
md5(md5());
sha1(md5());
md5(sha1());
sha1(sha1());
... etc


Da das kein Geheimnis ist, wirst du auch für die gängigen Verschachtelungen Rainbowtables finden, deswegen ist es besser wenn man zwischendurch einfach noch ein paar Unregelmäßigkeiten mit reinnimmt.
Ich seh das alles nicht so kritisch, aber das ist ja jedem selber überlassen ;)

6

Monday, May 17th 2010, 10:02pm

Ja, das stimmt wohl.
Es hat mich halt gewundert... Naja, solange das Passwort nicht nur ein Zeichen lang ist, das es zu verschlüsseln gilt, ist es sicherlich eine nette Methode...

Aber wenn man da schon in die Trickkiste greift, kann man ja schaun, was in PHP 5.3 alles dabei ist...

"As of PHP 5.3, you have also: md2, ripemd256, ripemd320, salsa10, salsa20, snefru256 and sha224. ;)"

Also, einmal bitte das Passwort gut salzen und durchnudeln...
Latest blogs Latest blogs: Bloggen...

Similar threads

Social bookmarks