PHP - Verschlüsselung

Welche Verschlüsselungarten gibt es in PHP?
Ich habe schon von MB5 gehört…

Kann man die auch wieder entschlüsseln?

Ich wollte ne Seite mit “Gehaimschrift machen…”

Danke für Antworten

devmag.net/webprog/php_verschluesselung.htm

ich glaub mal dass du md5 meinst. das ist eine verschlüsselungsmethode die sich nicht mehr entschlüsseln lässt. das ist wahrscheinlich nicht das richtige für dich

Ich find, dass dieses Tut aber gutes Grundlagen-Wissen vermittelt und ne Methode für seine Texte wird ja auch genannt…

base64_encode() 
base64_decode()

:wink:

ok danke.

Gibts nicht noch mehr von den Mehrwegverschlüsselungen?

Odre gibts net ne Methode, wie man einen eigenen Algorythmus angeben kann?

MFG Sebastian

einfach mal googel bemühen, da findest du alles was zu dem Thema wissen willst… :wink:

Hi supersites,

ich hab mal eine Klasse geschrieben, mit der du dein Code per base64 unkenntlich machen kannst.

Diese Methode ist zwar leicht zu knacken, aufgrund der vielfachen Codierungen/Dekodierungen wäre es den meisten wohl zu blöd, erst eine spezielle Schleife zum Entschlüsseln zu erstellen.

Meine Klasse macht das alles Automatisch:

<?php

class CodeProtector
{
	public function SetFile($file) {
	$this->file = $file;
	}

	public function SetLimit($limit) {
	$this->limit = $limit;
	}

	public function EnCrypt() {
		for($i=0; $i<$this->limit; $i++) {
		$this->code = str_replace("<?php", "", $this->code);
		$this->code = str_replace("?>", "", $this->code);
		$this->code = "eval(gzinflate(base64_decode('" . base64_encode(gzdeflate(file_get_contents($this->file))) . "')));";
		file_put_contents($this->file, $this->code);
		}
		echo "Encrypting Done!\n";
	}

	public function DeCrypt() {
		for ($i=0; $i<$this->limit; $i++) {
		$this->code = file_get_contents($this->file);
		$this->code = str_replace("eval(gzinflate(base64_decode('", "", $this->code);
		$this->code = str_replace("')));", "", $this->code);
		$this->code = gzinflate(base64_decode($this->code));
		file_put_contents($this->file, $this->code);
		}
		echo "Decrypting Done!\n";
	}
}

$protect = new CodeProtector();
$protect->SetFile("test.php");
$protect->SetLimit(100);
$protect->EnCrypt();

?>

Mit SetFile() wählst du die Datei aus.
Mit SetLimit() stellst du die Codierungsstärke ein
Mit EnCrypt() codierst du und mit DeCrypt() decodierst du eine Datei.

PS: Die Klasse ist aber nur für den Schutz von PHP-Dateien gedacht und ungeeignet dür Passwörter etc!

MfG, xcube

$key = "ABCDEFGHIJK";
$str = "Geheime Nachricht!";

echo $encoded = $str ^ $key;
echo "\n";
echo $decoded = $encoded ^ $key;

Man kann ja zur Abwechslung mal wieder ein Buch lesen.

Richtig heiß geworden auf das Thema bin ich erstmalig wegen Bruce Schneier’s Solitaire-Algorithmus als ich den Roman Cryptonomicon gelesen habe, vertiefen kannst Du das ganze dann zum Beispiel damit: Geheime Botschaften. Die Kunst der Verschlüsselung von der Antike bis in die Zeiten des Internet. (Taschenbuch)

Mit ein bisschen Grundwissen aus diesen Büchern, fällt die gezielte Suche im Web dann auch leichter. Übrigens gibt’s die Bücher (beide) ganz sicher in deiner örtlichen Bibliothek.

Base 64 ist in dem Sinne keine Verschlüsselung, das bastelt
Zeichenketten nur so um, daß sie nur aus ASCII-Zeichen bestehen.

Ein schon auf die Antike zurückgehendes Verfahren kann man
etwa mit der Funktion str_rot13 nachvollziehen - vielleicht sollte
man davor dann wirklich base 64 darauf anwenden ;o)
Das hält aber keinem auch nur halbherzigen
Entschlüsselungsversuch stand, ebensowenig, wenn man aufgrund
einer Tabelle alle Zeichen gegen andere austauscht.

Bei kurzen Nachrichten könnte man von allen Zeichen die
Unicode-Nummer bestimmen. Darauf kann man eine nicht
triviale Abbildung anwenden, deren Umkehrfunktion surjektiv ist.
Damit kann man statistische Häufungen etwa für die Umlaute
etwas kaschieren.

Ansonsten könnte man mal gucken, wie man PGP mit PHP
umsetzen kann - das kommt einer wirkungsvollen umkehrbaren
Verschlüsselung schon sehr nahe.

Theoretisch wie praktisch sicher ist die Konversion der Nachricht
in eine Binärzeichenkette, auf die man dann einen Schlüssel
bitweise addiert, der eine gleichlange Binärzeichenkette
darstellt. Das Ergebnis kann man öffentlich aushängen, den
Schlüssel übergibt man auf einem ‘sicheren’ Kanal ;o)
Ist dann vermutlich etwas Kniffelarbeit, das mit PHP umzusetzen,
sollte aber klappen.

Meine XOR-Lösung sieht man ja oben, und die funktioniert auch :ps: (Darauf schauen, dass der Schlüssel länger als der String ist!!!)

//EDIT: Hier nochmal die bessere Variante:

$str = "Das ist eine streng geheime Nachricht!!!";
$key = "";
for($i=0; $i<100; $i++)
	$key .= chr(rand(1, 255));


$crypt = base64_encode($str ^ $key);
echo "Crypt: $crypt\n";
echo "Key: ".base64_encode($key)."\n";
echo "Decrypt: ".(base64_decode($crypt) ^ $key)."\n";

gibt:

Crypt: xmjUWieTSoyzDBhrho28QtfJtHNz0nxIbXxiD9S1tHWuF/VDK/X3FA==
Key: ggmnek7gPqzWZXYOpv7IMLKn01MUtxQtBBEHL5 rU1x3cfpYrX9TWNTpMQ99LCxD9suJQxplj851z+csOzqMqqyLA1YCUrLXN+PetQwO8QbWekHs48m7VZmihdDZEneBmXbbl8Q==
Decrypt: Das ist eine streng geheime Nachricht!!!

[quote=“hoffmann”]

Ansonsten könnte man mal gucken, wie man PGP mit PHP
umsetzen kann - das kommt einer wirkungsvollen umkehrbaren
Verschlüsselung schon sehr nahe.
…[/quote]

Da gibt’s bereits recht praktikable Lösungen:
[ul]
[li]http://devzone.zend.com/article/1265[/li]
[li]http://www.gnupg.org/gpgme.html[/li][/ul]

Außerdem gibts: at.php.net/mcrypt

ok danke, ich werde mal gucken, welche ich nehme…

Nochmal zu meiner Idee:

Ich wollte ein Formular machen mit:

  1. Text, also der Text, der verschlüsselt werden soll.

  2. Eine Checklist, bei der man auswählen kann, mit welchem Algorythmus/wie oft die Nachricht verschlüsselt werden soll. ODER: Ingabefeld für den en/decodierungsstring.

Die 2. Variante wäre besser, also die mit dem man den Algorythmus selber festlegen kann… .

Das mit dem $key .= random()

versteh ich net, da doch dann der schlüssel zufällig gewälht wird und wenn man die Nachricht weitergibt, müsste ma ja den (de-)codierungsschlüssel doch mitgeben oder?

Und dann könnt eja jeder die nachricht wieder entschlüsseln.

ich dachte mir eher, das sich 2 Personen auf einen en/de-Codierungs-STRING einigen, mitdem sie dann immer die Nachricht de/encodieren können.

Geht das?
Oder muss ich dazu eine andere Sparache benutzen?
PHP wäre aber am besten.

Hoffe das man das lösen kann.
MFG Sebastian.

Klar :ps:

Wenn doch gleich der Key, oder???

[quote]Das mit dem $key .= random()
versteh ich net, da doch dann der schlüssel zufällig gewälht wird und wenn man die Nachricht weitergibt, müsste ma ja den (de-)codierungsschlüssel doch mitgeben oder?[/quote]
Den übergibst du über eine andere Methode (Mail, oder in einem DB-gestütztem Benutzer-System)

Klar geht das mit meiner Methode, du musst nur den besprochenen Key so verlängern, dass er mind. gleich lange ist wie Nachricht

$key = "abc_geheim";
$str = "Das ist eine Super-Geheime Nachricht!";

$key = md5($key, true);
$key = str_repeat($key, ceil(strlen($str) / strlen($key));

$crypt = base64_encode($str ^ $key);
echo "Crypt: $crypt\n";
echo "Key: ".base64_encode($key)."\n";
echo "Decrypt: ".(base64_decode($crypt) ^ $key)."\n";

Wobei hier str_repeat keine gute Methode zur String-Längung ist, da fallen schnell Wiederholungen auf. Einen geeigneteren Algorithmus zu finden überlasse ich dir :wink: