php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.01.2007, 17:15  
Erfahrener Benutzer
 
Registriert seit: 14.07.2005
Beiträge: 157
DonTermi
Standard [solved] mcrypt frage

Hallo,

ich habe mich endlich mal dazu durchgerungen mich mit mcrypt zu befassen. Eigentlich ne feine Sache. Nur habe ich bisher ein kleines Verständnisproblem.

Ich habe mich an dem Beispiel aus php.net versucht:

Code:
   $key = "This is a very secret key";
   $text = "Meet me at 11 o'clock behind the monument.";

   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);


   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $plaintext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
Am Ende kommt nicht mehr mein Klartext heraus. Sehe ich es richtig, daß Du die Zeile $iv = mcrypt_create_iv(... ein Zufallsschlüsselerzeugt und dieser aber bei mcrypt_encrypt und mcrypt_decrypt identisch sein muß, damit der verschlüsselte Text wieder herauskommt?

Gibt es vielleicht eine andere, bessere Methode Texte zu ver- und entschlüsseln?
__________________
[visit Donvelopment.org]
PGP-KeyID: 0xBEC31126]
[Blog:Don's Blog]
DonTermi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.01.2007, 17:31  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://www.dynamicwebpages.de/php/ref.mcrypt.php
...
PHP-Code:
$key "this is a secret key";
$input "Let us meet at 9 o'clock at the secret place.";

$encrypted_data mcrypt_ecb (MCRYPT_3DES$key$inputMCRYPT_ENCRYPT);
?> 
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 30.01.2007, 17:48  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Bekomme leider mein mcrypt-extension nicht zum Laufen, aber das hier sollte eigentlich funktionieren:

PHP-Code:
<?php
class Cryptor
{
    private 
$_td;
    private 
$_cypher 'blowfish';
    private 
$_mode   'cfb'
    private 
$_key    'si2_"/ffu&2gz';
    
    public function 
__construct()
    {
        
$this->_td  mcrypt_module_open($this->_cypher''$this->_mode'');
    }
    
    public function 
encrypt($plaintext)
    {
        
$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 
$iv $crypttext;
    }
    
    public function 
decrypt($crypttext)
    {
        
$ivsize mcrypt_get_iv_size($this->_td);
        
$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);
    }
}
?>
Zergling-new ist offline  
Alt 30.01.2007, 17:49  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

man bist du großzügig ... *copy*
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
Alt 31.01.2007, 08:25  
Erfahrener Benutzer
 
Registriert seit: 14.07.2005
Beiträge: 157
DonTermi
Standard

Danke Zergling Werd ich auch gleich mal ausprobieren.

Aber Du benutzt auch einen iv mit rand? ah. Habs grad gesehen. Du hängst den iv vorangestellt an den crypttext dran. Da wird mir alles klar

@Zergling: Was ist eigentlich der Unterschied zwischen mcrypt_encrypt /mcrypt_decrypt und mcrypt_generic /mdecrypt_generic?
__________________
[visit Donvelopment.org]
PGP-KeyID: 0xBEC31126]
[Blog:Don's Blog]
DonTermi ist offline  
Alt 31.01.2007, 09:10  
Erfahrener Benutzer
 
Registriert seit: 14.07.2005
Beiträge: 157
DonTermi
Standard

@Zergling: In Zeile 25 hast Du noch einen Fehler.

falsch: $ivsize = mcrypt_get_iv_size($this->_td);
richtig: $ivsize = mcrypt_enc_get_iv_size($this->_td);

Ansonsten klappt wunderbar

Besteht eigentlich eine Art Sicherheitsrisiko wenn man den $iv mit vor den crypttext hängt? Also das man den $iv mit bekannt gibt.
__________________
[visit Donvelopment.org]
PGP-KeyID: 0xBEC31126]
[Blog:Don's Blog]
DonTermi ist offline  
Alt 31.01.2007, 10:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

iv sollte bei bestimmten Kryptographie-Modi "zufällig" sein, sonst kann man ihn wohl hacken.
Aber so richtig durchschaut habe ich das ganze selbst auch nicht, muss man aber finde ich auch nicht.
Zergling-new ist offline  
Alt 31.01.2007, 11:08  
Erfahrener Benutzer
 
Registriert seit: 14.07.2005
Beiträge: 157
DonTermi
Standard

Haste recht. Den Durchblick sollte man den Experten überlassen

Aber Dein Beispiel funzt. Bin ich froh. Kann ich jetzt endlich das Kreditkartenmodul für meinen Mini-Shop endlich fertigstellen.
__________________
[visit Donvelopment.org]
PGP-KeyID: 0xBEC31126]
[Blog:Don's Blog]
DonTermi ist offline  
Alt 11.07.2007, 13:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
etwas nachträglich aber immerhin, hier die funktionierende Mcrypt-Klasse:
PHP-Code:
<?php
class Mcrypt
{
    private 
$_td;
    private 
$_cypher MCRYPT_BLOWFISH;
    private 
$_mode   MCRYPT_MODE_CFB;
    private 
$_key    'si2_"/ffu&2gz'// this is your "password"
    
    
public function __construct()
    {
        
$this->_td  mcrypt_module_open($this->_cypher''$this->_mode'');
    }
    
    public function 
encrypt($plaintext)
    {
        
$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)
    {
        
$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);
    }
}
?>
Zwecks "Zeichenglättung" habe ich noch base64_* eingebaut. Die mcrypt-Extension muss installiert sein (php.ini -> "extension=php_mcrypt.dll" entkommentieren (führendes ; entfernen) -> Apache restarten).
Zergling-new ist offline  
Alt 11.09.2007, 18:57  
Erfahrener Benutzer
 
Benutzerbild von SvenLittkowski
 
Registriert seit: 05.09.2004
Beiträge: 578
SvenLittkowski zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Hi Zergling,

ich habe diese Funktionen in einer Datei gespeichert, und diese mittels INCLUDE in meine Webpages eingebunden.

Aber da ich vieles noch nicht in PHP gemacht habe, will ich Dich kurz fragen, wie ich nun jene Funktionen aufrufe. Einfach "encrypt($plaintext)" aufrufen? Ich kenne mich mit Klassen noch nicht aus, daher die Frage.
__________________

Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
Sven
SvenLittkowski 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 htaccess, mcrypt_encrypt(mcrypt_rijndael_256, mcrypt man, muss man mcrypt_create_iv benutzen, php mcrypt_encrypt, php mcrypt_encrypt innerhalb einer funktion, mcrypt benutzen, mcrypt crypt unterschied, unterschied mcrypt und crypt, mcrypt_generic mcrypt_encrypt unterschied, mcrypt mysql

Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 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.