php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.09.2007, 19:03  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,

PHP-Code:
<?php
// als erstes jeweils ausführen
$mcrypt = new Mcrypt(); // Objekt-Instanz der Klasse erzeugen
// verschlüsseln
$cryptedStuff $mcrypt->encrypt("Sven aus Berlin bzw. Jamaica");
echo 
$cryptedStuff// sollte nicht "Sven aus Berlin bzw. Jamaica" sein
echo "
\n"
;
// entschlüsseln
$plainStuff $mcrypt->decrypt($cryptedStuff);
echo 
$plainStuff// sollte "Sven aus Berlin bzw. Jamaica" sein.
?>
Wenn ich mal lustig bin erweiter ich die Funktion noch um setPassword(), dann kann man den _key immer selbst setzen und die Klasse ist nicht auf ein Passwort beschränkt, ist ja schon etwas unflexibel.
Zergling-new ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.09.2007, 19:21  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Notice: Use of undefined constant MCRYPT_BLOWFISH - assumed 'MCRYPT_BLOWFISH' in T:\projects\local\host\public\test\mcrypt.php on line 56

Notice: Use of undefined constant MCRYPT_MODE_CFB - assumed 'MCRYPT_MODE_CFB' in T:\projects\local\host\public\test\mcrypt.php on line 56

Fatal error: Call to undefined function mcrypt_module_open() in T:\projects\local\host\public\test\mcrypt.php on line 11
In so einem Fall ist PHPs mcrypt-Extension nicht implementiert, das heißt sie muss entweder in der php.ini geladen werden:
Code:
extension=php_mcrypt.dll
(Windows, Linux-Dateiendung wäre so)

Falls der Zugriff auf die php.ini nicht möglich ist, kann man versuchen die Extension zur Laufzeit nachzuladen:
http://de2.php.net/dl

Hier die erweiterte Version, die ein Passwort erzwingt:
PHP-Code:
<?php
class Mcrypt
{
    private 
$_td;
    private 
$_cypher MCRYPT_BLOWFISH;
    private 
$_mode   MCRYPT_MODE_CFB;
    private 
$_key    null// this is your "password"

    
public function __construct($password null)
    {
        
$this->_td  mcrypt_module_open($this->_cypher''$this->_mode'');
        if (!
is_null($password)) {
            
$this->setKey($password);
        }
    }

    public function 
setKey($password)
    {
        
$this->_key md5($password);
    }

    public function 
encrypt($plaintext)
    {
        if (
is_null($this->_key)) {
            throw new 
Exception("key not set, encryption denied, please call setKey()-method first");
        }
        
$iv mcrypt_create_iv(mcrypt_enc_get_iv_size($this->_td), MCRYPT_RAND);
        
mcrypt_generic_init($this->_td$this->_key$iv);
        
$crypttext mcrypt_generic($this->_td$plaintext);
        
mcrypt_generic_deinit($this->_td);
        return 
base64_encode($iv $crypttext);
    }

    public function 
decrypt($crypttext)
    {
        if (
is_null($this->_key)) {
            throw new 
Exception("key not set, decryption not possible, please call setKey()-method first");
        }
        
$crypttext base64_decode($crypttext);
        
$ivsize mcrypt_get_iv_size($this->_cypher$this->_mode);
        
$iv substr($crypttext0$ivsize);
        
$crypttext substr($crypttext$ivsize);
        
mcrypt_generic_init($this->_td$this->_key$iv);
        
$plaintext mdecrypt_generic($this->_td$crypttext);
        
mcrypt_generic_deinit($this->_td);
        return 
$plaintext;
    }

    public function 
__destruct()
    {
        
mcrypt_module_close($this->_td);
    }
}
?>
Es bleibt jedem selbst überlassen, welche Variante er bevorzugt.
Zergling-new ist offline  
Alt 11.09.2007, 19:39  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo SvenLittkowski,

hier musst du einfach ein

PHP-Code:
<?php
include('mcrypt.class.php');
$oMC = new Mcrypt();
$cryptedtext $oMC->encrypt($plaintext);
?>
notieren.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 11.09.2007, 21:27  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Uhh! Ohh! Oh nein! Damn!

Sobald ich die Datei mittels INCLUDE einbinde, funktioniert jene Page nicht mehr, die jene Seite einbindet: alles bleibt leer.

Hier jene komplette Seite, vieleicht kannst Du ja ahnen, woran es liegt.

PHP-Code:
<?PHP
 session_start
();
 
$MyUsername=stripcslashes(strip_tags(trim($_POST["MyUsername"]),"[b] [/b][*] [i] [/i] <u> </u> 
 <font> </font>"
));
 
$MyPassword=stripcslashes(strip_tags(trim($_POST["MyPassword"]),"[b] [/b][*] [i] [/i] <u> </u> 
 <font> </font>"
));
 
$ButtonSubmit=stripcslashes(strip_tags(trim($_POST["ButtonSubmit"]),"[b] [/b][*] [i] [/i] <u> </u> 
 <font> </font>"
));
 @include(
"t/Hinweise.php4"); 
 @include(
"p/Standards.php4"); 
// @include("t/Crypt.php4");

 
if($MyUsername&&$MyPassword)
 {
  @include(
"t/DbConn.php4");
  
$Befehl="Select ".
          
"`NameFirst`, `NameLast`, `NameBusiness`, `Address`, `City`, `ZIP`, `State`, `Country`, ".
          
"`Telephone`, `EMail`, `Password`, `QuestionSecure`, `Account` ".
          
"from JBJ_Clients ".
          
"where `EMail`='".$MyUsername."' and `Password`='".$MyPassword."'";   // echo($Befehl);
  
$Anfrage=mysql_query($Befehl,$Verbindung);
  if(
$Datensatz=@mysql_fetch_assoc($Anfrage))
  { 
   
$MyName="<table border=\"0\" style=\"width: 160px; height: 50px\" class=\"FramerGray\">\n".
           
"  <tr>\n".
           
"    <td style=\"width: 160px; height: 50px\" valign=\"middle\" align=\"center\" bgcolor=\"#FFFFFF\" class=\"Contents\">\n".
           
"<font style=\"color: #A1BB8E; font-size: 10px\">\n".
           
"Welcome, ".$Datensatz["NameFirst"]." ".$Datensatz["NameLast"].".\n".
           
"

\n"
.
           
"<a href=\"Logout.php4\">Log out</a>.\n".
           
"</font>\n".
           
"    </td>\n".
           
"  </tr>\n".
           
"</table>\n";
           
//   $mcrypt=new Mcrypt();  
//   $cryptedStuff=$mcrypt->encrypt("Sven aus Berlin bzw. Jamaica"); 
//   echo("mmm".$cryptedStuff); 
         
           
   
$MyLoginNameFirst=$Datensatz["NameFirst"];
   
$MyLoginNameLast=$Datensatz["NameLast"];
   
$MyLoginAddress=$Datensatz["Address"];
   
session_register("MyFullName");
   
session_register("MyFullAddress");
   
   
   
   
   
$Datensatz["NameFirst"]." ".$Datensatz["NameLast"];
   
$Whatever="?What1=".$Datensatz["NameFirst"]."&What2=".$Datensatz["NameLast"]."&What3=".$Datensatz["Address"];
   
$Load="<script language=\"JavaScript\">window.open(\"p/Start.php4".$Whatever."\",\"Page\");</script>";
  }
  else
  {
   if(
$MyUsername||$MyPassword)
   {
    echo(
Hinweis("[b]Not logged in.[/b]
Please use the correct username and password.
<a href=\"Login.php4\">Retry</a>"
,"#880000","100%"));
    
$Load="";
   }
  }
  @include(
"t/DbClose.php4");
 }
 else
 {
  echo(
Hinweis("[b]Not logged in.[/b]
Please use the correct username and password.
<a href=\"Login.php4\">Retry</a>"
,"#880000","100%"));
 }
?>
<html>
<head>
<title></title>
<?PHP echo($Load); ?>
</head>
<body>
<?PHP echo($MyName); ?>
</body>
</html>
__________________

Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
Sven
SvenLittkowski ist offline  
Alt 12.09.2007, 00:21  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wenn eine Seite leer bleibt, dann ist wahrscheinlich ein PHP-Fehler aufgetreten, während display_errors auf FALSE ist.

PHP-Code:
<?php
error_reporting
(E_ALL);
ini_set("display_errors"true);
//..
?>
Ein @ vor dem include macht wirklich nur Sinn, wenn es nichts ausmacht, dass das Einbinden der Datei fehlschlägt. Das ist praktisch nie der Fall!
Wenn die Datei eingebunden werden muss, damit das Skript sinnvoll arbeitet, dann verwende require (der Name sagt es schon: "benötigt"), wenn es nicht sein muss reicht include, die Warnstufe beim Error-Reporting ist geringer und kann deshalb über error_reporting(E_ALL) der Produktionsumgebung angepasst werden.

Ich verwende immer require_once, weil alle Dateien die ich einbinde auch benötigt werden, wenn sie nur bedingt benötigt werden, kommen sie eben in den if-Block, der die Bedingung erfüllt!
Zergling-new ist offline  
Alt 12.09.2007, 18:05  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Habe mit REQUIRE eingebunden. Hier die Fehlermeldung:

Zitat:
parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /homepages/28/d213353050/htdocs/JaBusiness/t/Crypt.php4 on line 4
Crypt is the file with your code. That line 4 contains the line:

PHP-Code:
private $_td
Zergling, was ist an Deinem Script falsch?
__________________

Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
Sven
SvenLittkowski ist offline  
Alt 12.09.2007, 18:23  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Es ist in PHP 5 geschrieben.

Die PHP4-Version wirft bei mir allerdings haufenweise Fehler, wenn bei dir nicht, dann schätz dich glücklich, andernfalls kannst du die Klasse wohl nicht zur Verschlüsselung verwenden:
PHP-Code:
<?php
class Mcrypt
{
    var 
$_td;
    var 
$_cypher MCRYPT_BLOWFISH;
    var 
$_mode   MCRYPT_MODE_CFB;
    var 
$_key    null// this is your "password"

    
function __construct($password null)
    {
        
$this->_td  mcrypt_module_open($this->_cypher''$this->_mode'');
        if (!
is_null($password)) {
            
$this->setKey($password);
        }
    }

    function 
setKey($password)
    {
        
$this->_key md5($password);
    }

    function 
encrypt($plaintext)
    {
        if (
is_null($this->_key)) {
            
trigger_error("key not set, encryption denied, please call setKey()-method first"E_USER_WARNING);
        }
        
$iv mcrypt_create_iv(mcrypt_enc_get_iv_size($this->_td), MCRYPT_RAND);
        
var_dump($iv);
        
mcrypt_generic_init($this->_td$this->_key$iv);
        
$crypttext mcrypt_generic($this->_td$plaintext);
        
mcrypt_generic_deinit($this->_td);
        return 
base64_encode($iv $crypttext);
    }

    function 
decrypt($crypttext)
    {
        if (
is_null($this->_key)) {
            
trigger_error("key not set, decryption not possible, please call setKey()-method first"E_USER_WARNING);
        }
        
$crypttext base64_decode($crypttext);
        
$ivsize mcrypt_get_iv_size($this->_cypher$this->_mode);
        
$iv substr($crypttext0$ivsize);
        
$crypttext substr($crypttext$ivsize);
        
mcrypt_generic_init($this->_td$this->_key$iv);
        
$plaintext mdecrypt_generic($this->_td$crypttext);
        
mcrypt_generic_deinit($this->_td);
        return 
$plaintext;
    }

    function 
close()
    {
        
mcrypt_module_close($this->_td);
    }
}
?>
Zergling-new ist offline  
Alt 12.09.2007, 18:33  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zergling,

ich hatte erstmal die Datei umbenannt in Crypt.php5, und dementsprechend auch mit diesem neuen Namen eingebunden. Mein Server unterstuetzt ja auch PHP5. Jedoch bleibt der Fehler bestehen:

Zitat:
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /homepages/28/d213353050/htdocs/JaBusiness/t/Crypt.php5 on line 4
Davon abgesehen, werde ich mir mal Deine PHP4-Version vornehmen. Mal sehen, was ich damit machen kann. Aber bitte versuche trotzdem, mir bei der PHP5-Version zu helfen. Sagt Dir die Fehlermeldung was?
__________________

Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
Sven
SvenLittkowski ist offline  
Alt 12.09.2007, 18:38  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Habe beide Versionen getestet - es handelt sich um denselben Fehler fuer beide Versionen (siehe ZITAT in obigem Posting).

Was ist das "mcrypt_module_open", bzw. wo steht der entsprechende Code fuer diese Funktion?
__________________

Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
Sven
SvenLittkowski ist offline  
Alt 12.09.2007, 19:54  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Der Fehler kommt bei mir auch - wenn ich die PHP5-Version der mcrypt-Klasse mit PHP4 aufrufe!

Zitat:
Was ist das "mcrypt_module_open", bzw. wo steht der entsprechende Code fuer diese Funktion?
Das mcrypt-Modul stellt diese Funktion als System-Funktion zur Verfügung. Wie gesagt muss dieses Modul in der php.ini aktiviert sein. Wenn nicht, ist die Funktion PHP nicht bekannt, es wird ein "unknown function" o.ä. Fehler geworfen.

http://de.php.net/mcrypt_module_open

Übrigens: Hast du den "PHP 4 end of life announcement"-Artikel schon gelesen?
Du kennst ja noch nichtmal public/private Deklarationen oder OOP. Du wirst den Anschluss verpassen, wenn du nicht bald umsteigst und dich ein bißchen reinkniest.
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur dauerhaften voting sperre! litterauspirna PHP Tipps 2008 19 29.05.2008 16:19
DNS Problem / Frage b++ Server, Hosting und Workstations 3 12.10.2006 13:27
Frage zu einem mySQL/php/html Konstrukt &lt;Daniel&gt; PHP Tipps 2006 5 11.07.2006 16:07
Access Frage - Datenbankverbindung abfragen reimondo Off-Topic Diskussionen 1 01.10.2005 18:24
Blöde Frage " oder ' FireFIghter PHP Tipps 2005-2 7 22.09.2005 07:06
[Erledigt] Einfache Frage! Datenbanken 2 21.09.2005 08:27
Frage zu grafiken JohnRambo PHP Tipps 2005-2 23 16.08.2005 20:57
[Erledigt] frage PHP Tipps 2005-2 9 15.06.2005 13:22
.htaccess - Frage Stümper PHP Tipps 2005 11 30.05.2005 11:56
[Erledigt] Performence Frage PHP-Fortgeschrittene 10 06.05.2005 19:00
Frage zu einem Editformular PHP Tipps 2005 3 25.04.2005 14:58
Frage: gibt es bei PHP sowas wie target="_blank" PHP Tipps 2005 6 20.04.2005 06:27
[Erledigt] Frage zur Funkrionen? PHP Tipps 2004-2 10 01.12.2004 09:42
Kurze Frage an die Php Profis PHP Tipps 2004-2 11 24.11.2004 17:38
[Erledigt] Frage! PHP Tipps 2004 4 27.07.2004 11:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mcrypt aktivieren, mcrypt in php.ini aktivieren, use of undefined constant mcrypt_encrypt, php fatal error: call to undefined function mcrypt_module_open(), call to undefined function mcrypt_get_iv_size() in, use of undefined constant mcrypt_blowfish, fatal error: call to undefined function mcrypt_module_open() in crypto, mcrypt php.ini einstellen, notice: use of undefined constant mcrypt_blowfish, mcrypt php4, undefined function mcrypt_encrypt, mcrypt entschlüsseln fehler anzeige leer, php mcrypt, mcrypt php, mcrypt in php.ini linux aktivieren, php mcrypt aktivieren, mcrypt_module_open unexpected t_string, mcrypt_decrypt null abfragen, php include mcrypt, php.ini crypt md5 als standard

Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.