[TUT]Einweg-Zweiweg Verschlüsselung via php
2 verfasser
EliteSkill :: Coding :: Webcoding
Seite 1 von 1
[TUT]Einweg-Zweiweg Verschlüsselung via php
Hallo EliteSkill
Vorwort
EinWeg-Verschlüsselung
Zwei-Weg-Verschlüsselung
Das war es auch im großen oder ganzen.
mfg
Vorwort
- Spoiler:
heute werde ich euch einen kurzen Einblick in die EinWeg und ZweiWegVerschlüsselung via PHP zeigen. Dies wird vorallem für das Verschlüsseln von Passwörtern oder sensiblen Dateien benutzt. ( Richtet sich an diejenigen, die sich schon etwas damit auskennen )
EinWeg-Verschlüsselung
- Spoiler:
- Die Ein-Weg-Verschlüsslung hat einen deutlichen Vorteil für die Anwender einer Webapplikation,
da NIEMAND , auch nicht der Datenbankadmnistrator
des Betreibers jemals das unverschlüsselte Passwort zu Gesicht bekommt. ( Wird soweit ich weiss, bei der Datenbank
von Metin2 verwendet
( Passwort ist verschlüsslet in der Datenbank).
WICHTIG ! Es ist nicht möglich bzw nur sehr schwer wieder zu entschlüsseln!
Beispiel für die Login überprüfung eines per Ein-Weg verschlüsselten Passwords...- Code:
<?php
function LoginOkay($eingabePasswort,$dbPasswort) {
§checkPasswort = verschluessele($eingabePasswort);
if($checkPasswort == $dbPasswort)
{
return true;
}
else
{
return false;
}
}
?>
Hierbei hilft es dem Angreifer ( wenn er euer PW will) also nichts, den verschlüsselten Wert aus der Datenbank zu kennen. Benutz der das Passwort nbeim Login so wird dieser Wert durch das System abermals verschlüsselt.
Zurzeit ist der wohl am meisten benutze EinWegAlgorithmus der MD5 ( Ein Hashing Algorithmus).
Anwendung in PHP- Code:
string md5(string $zeichenkette [, boolean $binaer])
Bsp:- Code:
<?php
echo md5('phpmysql');
//ergibt c4cdf8eb922fc70cbf676b5e517d5f37
echo md5('phpmysql',true);
//ergibt ÄÍøë’/Ç¿gk^Q}_7
echo sha1('phpmysql');
//ergibt 49d88a4db817a5733ff1e8ff7a3f49a7489f71d6
echo sha1('phpmysql',true);
//ergibt IØŠM¸ ¥s?ñèÿz?I§HŸqÖ
?>
Zwei-Weg-Verschlüsselung
- Spoiler:
- Mit der Zwei-Weg-Verschlüsselung werden Daten verschlüsselt, die man über das Internet verschicken will, die hinterher aber auch wieder lesbar sein sollen. Hierfür wird meistens mcrypt verwendet ( ein Modul für PHP )
Anwendung :- Code:
string mcrypt_encrypt(string $alsorithmus;
string $schluessel, string $zeichenkette,
string $modus [, string $initialisierung])
- Code:
MCRYPT_BLOWFISH (>>blowfish<<)
MCRYPT_TRIPLEDES (>>tripledes<<)
etc
Als Schlüssel $schluessel dient eine von euch gewählte Zeichenkette. Hier gilt allerdings vorsicht, nur ihr und diejenige Person, die die Datei wieder entschlüsseln soll, sollten auch die Zeichenkette kenne. Die zu verschlüsselten Daten werden in $zeichenkette angegeben.
As $modus kann man einen der folgenen Konstanten wählen:- Code:
MCRYPT_MODE_ECB (>>electronic codebook<<): vornehmlich für kurze Zeichenketten
MCRYPT_MODE_CBC (>>cipher block chaining<<): für Dateiverschlüsselung
MCRYPT_MODE_CFB (>>cipher feedback<<): für Byteströme , mit Verschlüsselung einzelner Bytes
MCRYPT_MODE_NOFB (>>output feedback<<): ähnlich wie >>cipher feedback<<
MCRYPT_MODE_STREAM: für dedizierte Bytesromalgorithmen
Für $initialisierung muss man sich einen binären String vorstellen, der für den Verschlüsselungsalgorithmus wie ein Startpunkt wirkt, damit er weiß , mit welcher Zeichenkette er die Arbeit aufnehmen soll.
Je nach Kombination von Algorithmus und Modus hat der Initialisierungsvektor eine eigene Form bzw. Länge. Diese findest du mit dem Befehl- Code:
int mcrypt_get_iv_size(string $algorithmus,string $modus)
heraus. Der resultierende Wert lässt sich dann nutzen, um eine spezifischen Vektor mittels- Code:
string mcrypt_create_iv(int $laenge, int $quelle)
zu erstellen. Als Quelle solltest du aus Kmpatibilitätsgürnden den in PHP eingebauten Zufalsgenerator einsetzen. Um dies anzuzeigen, dient die Konstante- Code:
MCRYPT_RAND
- Code:
MCRYPT_DEV_RANDOM und MCRYPT_DEV_URANDOM
Beipsiel für eine einfache Zeichenkette "unleserlich machen"- Code:
<?php
$zeichenkette = "Hier ist ein Satz mit einem kleinen Geheimnis: 1";
$schluessel = "0815";
$iv_size = mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CFB);
srand(microtime());
echo $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$verschluesselt = mcrypt_encrypt(MCRYPT_TRIPLEDES, $schluessel, $zeichenkette, MCRYPT_MODE_CFB, $iv);
echo "<br />".$verschluesselt;
echo mcrypt_decrypt(MCRYPT_TRIPLEDES, $schluessel, $verschluesselt, MCRYPT_MODE_CFB);
?>
Heraus kommt eine Verschlüsselte Zeichenkette $verschluesselt, die sich gefahrlos verschicken lässt. Jede person, die diese Nachricht abfäng und nicht im Besitz des Schlüssels und des INitialisierungsvektors ist, kann mi tdem Inhalt nichts anfangen . Den INitialisierungsvektor kann man getrost der Nachricht beifügen, denn der Empfänger benötigt ihn zur Entschlüsselung über- Code:
string mcrypt_decrypt(string $algorithmus,
string $schluessel, string $verschluesselt,
string $modus [, string $initialisierung])
Das war es auch im großen oder ganzen.
mfg
- Code:
NE4Y- Anzahl der Beiträge : 3
ElitePunkte : 17
EliteBewertungen : 6
Anmeldedatum : 28.01.11
EliteSkill :: Coding :: Webcoding
Seite 1 von 1
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten