Fehler in Message Encryption and Decryption

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Fehler in Message Encryption and Decryption

Beitrag von Dungeonwatcher »

Moin! :cool:

Ich habe in meinem Forum den Mod Private Message Encryption and Decryption eingebaut, welcher auch bestens funktioniert. Allerdings gibt es beim verschlüsseln diese PHP Warnmeldung aus:
PHP Warning: mcrypt_encrypt(): The IV parameter must be as long as the blocksize in ...\forum\privmsg.php on line 1463
Das betrifft hier die Zeile 7:

Code: Alles auswählen

			if ($encrypt)
				{
					$cipher_alg = MCRYPT_RIJNDAEL_256;
					$encrypted_message = str_replace("\\\"", "\"", $privmsg_message);
					$encrypted_message = str_replace("\\'", "'", $encrypted_message);
					$encrypted_message = str_replace("\\\\", "\\", $encrypted_message);
					$encrypted_message = bin2hex(mcrypt_encrypt($cipher_alg, $encryption_key, $encrypted_message, MCRYPT_MODE_CFB, "1"));
					$encrypted_message = wordwrap($encrypted_message, 80, "<br>", 1);
					$encrypted_message = "Encrypted message follows:\n\n" . $encrypted_message;
					$sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
						VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . $encrypted_message . "')";
				}

und beim entschlüsseln:
PHP Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize in ...\forum\privmsg.php on line 685
Das betrifft hier die Zeile 6:

Code: Alles auswählen

	if ( $decrypt )
		{
			$cipher_alg = MCRYPT_RIJNDAEL_256;
			$decrypted_message = str_replace("Encrypted message follows:\n\n", "", $private_message);
			$decrypted_message = str_replace("<br>", "", $decrypted_message);
			$decrypted_message = trim(mcrypt_decrypt($cipher_alg, $encryption_key, pack("H*", $decrypted_message), MCRYPT_MODE_CFB, "1"));
			$private_message = str_replace("\r\n", "<br>", $decrypted_message);
			$decrypted_message = str_replace("\"", """, $decrypted_message);
		}
Wie muss es korrekt aussehen?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Der letzte Parameter, den Du hier mit "pauschal" 1 vorgibst, musst Du berrechnen.
Hier die Beschreibung aus der PHP-Anleitung: http://de2.php.net/manual/de/function.m ... ncrypt.php
Das gleiche gilt dann auch für das decodieren...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Aaaahhh, damit habe ich's hinbekommen. THNX

Bleiben jetzt nur noch Zwei Schönheitsfehler die mir auf Anhieb auffallen. Dies betrifft zum einen das Eingabefeld für das PW. Wenn der Cursor in diesem Feld ist und dann auf Enter gedrückt wird, landet man wieder in der PN Übersicht. Idealerweise sollte aber das gleiche passieren wie wenn auf den Button "verschlüsseln und Absenden" geklickt wird?

Der Zweite betrifft die " aus denen ein \" wird.
Zuletzt geändert von Dungeonwatcher am Fr 26.Jan, 2007 20:20, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Das quoten ginge so:

Code: Alles auswählen

$variable = str_replace('"', '\"', $variable);
Aber für das Passwort-Problem müsste man wissen, wie die Seite aufgebaut ist...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="69251"]Das quoten ginge so:

Code: Alles auswählen

$variable = str_replace('"', '"', $variable);
[/quote]

Hmmm, das klappt irgendwie nicht. Ich habe es so eingebaut:

Code: Alles auswählen

	if ( $decrypt )
		{
			$cipher_alg = MCRYPT_RIJNDAEL_256;
			$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
			$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
			$key = "This is a very secret key";
			$decrypted_message = str_replace("<b>Um diese verschl&uuml;sselte Nachricht zu lesen, gebe das Passwort unten rechts ein und klicke dann auf den Button "Nachricht entschl&uuml;sseln":</b>\n\n", "", $private_message);
			$decrypted_message = str_replace("<br />", "", $decrypted_message);
			$variable = str_replace('"', '"', $variable);
			$decrypted_message = trim(mcrypt_decrypt($cipher_alg, $encryption_key, pack("H*", $decrypted_message), MCRYPT_MODE_CFB, "$iv"));
			$private_message = str_replace("\r\n", "<br>", $decrypted_message);
			$decrypted_message = str_replace(""", """, $decrypted_message);
		}
bzw.:

Code: Alles auswählen

			if ($encrypt)
				{
					$cipher_alg = MCRYPT_RIJNDAEL_256;
					$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
					$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
					$key = "This is a very secret key";
					$encrypted_message = str_replace("\"", """, $privmsg_message);
					$encrypted_message = str_replace("\\'", "'", $encrypted_message);
					$encrypted_message = str_replace("\\", "", $encrypted_message);
					$variable = str_replace('"', '"', $variable);
					$encrypted_message = bin2hex(mcrypt_encrypt($cipher_alg, $encryption_key, $encrypted_message, MCRYPT_MODE_CFB, "$iv"));
					$encrypted_message = wordwrap($encrypted_message, 80, "<br />", 1);
					$encrypted_message = "<b>Um diese verschl&uuml;sselte Nachricht zu lesen, gebe das Passwort unten rechts ein und klicke dann auf den Button "Nachricht entschl&uuml;sseln":</b>\n\n" . $encrypted_message;
					$sql = "INSERT INTO " . PRIVMSGS_TEXT_TABLE . " (privmsgs_text_id, privmsgs_bbcode_uid, privmsgs_text)
						VALUES ($privmsg_sent_id, '" . $bbcode_uid . "', '" . $encrypted_message . "')";
				}
Aber für das Passwort-Problem müsste man wissen, wie die Seite aufgebaut ist...
Die beiden Templates siehe Anhang.

[ Attachment gelöscht am Sa 27.Jan, 2007 13:31 von oxpus ]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

"$variable" ist ja auch nur ein BEISPIEL-Name!!!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Ähm, ja, logisch. :wall:

Dann müsste es so aussehen:

Code: Alles auswählen

$encrypted_message = str_replace('"', '\"', $encrypted_message);
bzw.

Code: Alles auswählen

$decrypted_message = str_replace('"', '\"', $decrypted_message);
Aber es ändert sich leider nichts. :(
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Was denn ändern?

Wann/wo genau ist denn das Hochkomma störend?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="69263"]Wann/wo genau ist denn das Hochkomma störend?[/quote]

Z.B. wird aus: Dies ist ein "Beispiel" nach der Ver-/Entschlüsselung dies: Dies ist ein "Beispiel".
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann wandele mit addslashes/stripslashes um...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="69267"]Dann wandele mit addslashes/stripslashes um...[/quote]

Das habe ich noch nicht begriffen wie dies funktioniert. ^6

Ich hätte da aber mal eine Zwischenfrage.

Leider ist es auch möglich ohne eingetragenes PW zu "verschlüsseln". Ich würde dies gerne verhindern und stattdessen eine entsprechende Fehlermeldung ausgeben wollen. Genauso wie es z.B. bei fehlendem Subjekt geschieht. Als Vorlage hierfür dürfte wohl dieser Code dienen können:

Code: Alles auswählen

		$privmsg_subject = trim(htmlspecialchars($HTTP_POST_VARS['subject']));
		if ( empty($privmsg_subject) )
		{
			$error = TRUE;
			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Empty_subject'];
		}
Daraus habe ich mir folgendes gestrickt:

Code: Alles auswählen

		$encryption_key = trim(htmlspecialchars($HTTP_POST_VARS['encryption_key']));
		if ( empty($encryption_key) )
		{
			$error = TRUE;
			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Empty_encryption_key'];
		}
und zusätzlich in die lang_main.php

dies eingetragen:

Code: Alles auswählen

$lang['Empty_encryption_key'] = 'Wenn du eine Nachricht verschl&uuml;sseln willst, musst du ein Passwort eingeben.';
Das funktioniert auch. Jedoch zu gut, denn auch beim senden ohne Verschlüsselung gibt es diese Meldung. Ich denke das liegt nur daran, das der Code an der falschen Stelle steht, oder?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öhm, nein, nur, daß in der Bedingung

Code: Alles auswählen

if ( empty($encryption_key) )
auch noch abgefragt werden sollte, ob auch überhaupt verschlüsselt wird ;)
Also (wenn ich richtig liege) muss die Bedingung so lauten:

Code: Alles auswählen

if ( empty($encryption_key) && $encrypt )
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

[quote="oxpus";p="69440"]Öhm, nein, nur, daß in der Bedingung auch noch abgefragt werden sollte, ob auch überhaupt verschlüsselt wird ;)[/quote]

Jupp, leuchtet mir ein.
Also (wenn ich richtig liege) muss die Bedingung so lauten:
Super, das funktioniert. Danke

Nun geht's zum nächsten "Wunsch" in diesem Mod, die Passwortlänge vorgeben... Da hatte ich vor laaanger Zeit mal was auf phpbb.de gesehen. Ich mach mich dann mal auf die Suche.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Code: Alles auswählen

if (strlen($password) < X)
{
$error...
}
X ist die Mindestlänge des Passwortes...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Jupp, sowas habe ich jetzt auch so mit eingebaut:

Code: Alles auswählen

		$encryption_key = trim(htmlspecialchars($HTTP_POST_VARS['encryption_key']));
		{
			if ( empty($encryption_key) && $encrypt )
			{
				$error = TRUE;
			$error_msg .= ( ( !empty($error_msg) ) ? '<br />' : '' ) . $lang['Empty_encryption_key'];
			}
			if (( strlen($encryption_key) < 5) && $encrypt )
			{
				$error = TRUE;
				$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['toshort_encryption_key'];
			}
			if (( strlen($encryption_key) > 15) && $encrypt )
			{
				$error = TRUE;
				$error_msg .= ( ( isset($error_msg) ) ? '<br />' : '' ) . $lang['tolong_encryption_key'];
			}
		}
In die lang_main.php steht dann dies:

Code: Alles auswählen

$lang['toshort_encryption_key'] = 'Das gew&auml;hlte Passwort ist zu kurz.<br />Es muss mindestens 5 Zeichen und darf maximal 15 Zeichen lang sein.';
$lang['tolong_encryption_key'] = 'Das gew&auml;hlte Passwort ist zu lang.<br />Es muss mindestens 5 Zeichen und darf maximal 15 Zeichen lang sein.';
Das funktioniert jetzt bestens. :cool:

Nur werden jetzt bei fehlendem PW zwei Meldungen gezeigt: PW fehlt und PW zu kurz. Das ist zwar beides richtig, nur würde die erste Nachricht ja reichen?
Zuletzt geändert von Dungeonwatcher am Fr 02.Feb, 2007 17:42, insgesamt 3-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Code: Alles auswählen

if (( strlen($encryption_key) > 15) && $encrypt )
wird dann zu

Code: Alles auswählen

if (( strlen($encryption_key) > 15 && strlen($encryption_key) > 5) && $encrypt )
Zuletzt geändert von oxpus am Fr 02.Feb, 2007 21:40, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Neee, das funktioniert leider nicht. Es werden weiterhin beide Meldungen ausgegeben.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja, mit str_len, anstelle strlen ist das auch kein Wunder :(
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Moin! :cool:

Hiermit tut's jetzt wie gewünscht funktionieren:

Code: Alles auswählen

if ( ( (strlen($encryption_key) < 5) && $encrypt ) &&  (strlen($encryption_key) != 0) )
Bleibt jetzt nur noch ein echtes Problem übrig. ^6

Wie bekomme ich es hin, das beim Enter drücken im Formularfeld der zuständige Namen des Buttons mit übertragen wird?

Code: Alles auswählen

            <!-- BEGIN switch_privmsg -->
            <span style="margin-left: 50px; font-size: 80%">Password: </span>
            <input type="password" tabindex="7" class="post" name="encryption_key" size="16" maxlength="15" />
            <input type="submit" tabindex="8" name="encrypt" class="mainoption" value="verschl&uuml;sseln & Absenden" />
            <!-- END switch_privmsg -->
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wie bekomme ich es hin, das beim Enter drücken im Formularfeld der zuständige Namen des Buttons mit übertragen wird?
???

Wird doch, nämlich das, was beim Button (input) unter "name" steht...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

Nee, eben nicht. Wenn der Cursor im PW Feld steht und Enter gedrückt wird, öffnet sich das PopUp zum suchen von Benutzern. Übrigens geschieht dies auch Feld im Empfänger, und Titel.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ach das!
Öh, ja, der Fokus steht hier dann eindeutig auf dem Button, der bei "Enter" benutzt wird.
Damit wird aber auch "nur" die dahinter liegende Funktion ausgelöst und nicht das Formular gesendet.
Daher auch kein Name im Popup...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Dungeonwatcher
Beiträge: 1055
Registriert: Sa 19.Feb, 2005 01:16
Wohnort: Berlin
Kontaktdaten:

Beitrag von Dungeonwatcher »

Hi! :cool:

[quote="oxpus";p="69267"]Dann wandele mit addslashes/stripslashes um...[/quote]

Es ging tatsächlich viel, viel einfacher. Aus

Code: Alles auswählen

$encrypted_message = str_replace("\"", """, $privmsg_message);
wurde

Code: Alles auswählen

$encrypted_message = str_replace('\"', '"', $privmsg_message);
und schon wird aus den " auch nach dem entschlüsseln wieder ".

Fehlt mir jetzt nur noch DIE Idee für das Enter Problem. ^6
Antworten