1

Je travaille sur un Cakephp 2.3 J'essaye de crypter mes données que je stocke dans db, donc j'ai cherché un moyen de faire ce. J'ai trouvé ce http://bakery.cakephp.org/articles/utoxin/2009/08/01/cryptable-behaviorecakephp: comment puis-je stocker une donnée cryptée dans db puis décrypter avec la clé

je ne sais pas son meilleur behviour ou non ou si quelqu'un a le meilleur comportement alors s'il vous plaît me suggérer ..

donc j'est le problème ici ont lu tous les détails dans le lien, mais encore je ne peux pas obtenir de savoir que comment puis-je enregistrer mes champs chiffrés dans db

par exemple j'ai une fonction dans le contrôleur qui est la sauvegarde des données

$this->Messages->save($this->request->data); 

comment puis-je enregistrer ces données en crypté dans db

puis mon modal

public function getAllMessages($id){ 

    return $this->find('all',array(
     'order'=> array('idTextMessage DESC'), 
     'conditions' => array('User_id' => $id))); 
} 

comment puis-je déchiffrer ces données

Je l'ai fait mais le travail na pas

class Message extends AppModel{ 
public $useTable = 'textmessage'; 

public $actsAs = array( 
    'Cryptable' => array( 

     'fields' => array( 
      'mobileNo', 
      'body' 
     ) 
    ) 
); 
+0

Vous pouvez utiliser les fonctions de rappel 'beforeSave' et' afterFind' dans votre modèle pour chiffrer/déchiffrer les champs requis. – Derek

+0

@derek ... ne fonctionne pas Derek .. à nouveau les données ne sont pas cryptées dans mes tableaux – hellosheikh

Répondre

7

Je ne l'ai pas utilisé ce plugin, mais c'est à partir de 2009, donc c'est assez vieux maintenant. Je n'y mettrais pas trop de confiance.

Il est facile de déchiffrer/chiffrer en utilisant le Security::rijndael de Cake, sans utiliser de plugin (notez que le mcrypt php extension devra être installé - mais il se peut qu'il soit déjà installé).

D'abord, dans votre modèle, ajouter un tableau des champs que vous souhaitez cryptés:

public $encryptedFields = array('mobile', 'body'); 

Ensuite, mettre en œuvre un beforeSave comme ceci:

public function beforeSave($options = array()) { 
    foreach($this->encryptedFields as $fieldName){ 
     if(!empty($this->data[$this->alias][$fieldName])){ 
      $this->data[$this->alias][$fieldName] = Security::rijndael($this->data[$this->alias][$fieldName], Configure::read('Security.key'), 'encrypt'); 
     } 
    } 
    return true; 
} 

Votre méthode afterFind devrait être à peu près la même, sauf qu'il doit déchiffrer plutôt que chiffrer:

public function afterFind($results = array()) { 
    foreach($this->encryptedFields as $fieldName){ 
     if(!empty($results[$this->alias][$fieldName])){ 
      $results[$this->alias][$fieldName] = Security::rijndael($results[$this->alias][$fieldName], Configure::read('Security.key'), 'decrypt'); 
     } 
    } 
    return $results; 
} 

Remarque Je n'ai pas testé tous les ce code - il est piraté ensemble de morceaux dans une de mes propres applications. Mais cela devrait vous mettre sur la bonne voie.

+0

merci beaucoup .. je pense que je suis presque à proximité de ma solution .. eh bien j'ai essayé le code ur et exactement j'ai collé le code ur mais maintenant les données vont vide dans db ..? – hellosheikh

+0

Avez-vous installé l'extension mcrypt? Pouvez-vous utiliser Security :: rijndael, même pour un cas simple?Si vous mettez le débogage ($ data); à la fin de votre beforeSave, juste avant de revenir vrai, qu'est-ce que vous obtenez? –

+0

son déjà installé sur mon serveur mcrypt .. laissez-moi vérifier les données – hellosheikh

-1

bien les trouver après les fonctions ne fonctionnait pas ne sais pas pourquoi .. donc je fais ce .. peut b, il aide quelqu'un d'autre ..

public function beforeSave($options=array()) { 
if (isset ($this -> data [ $this -> alias ] [ 'email' ])) { 
    $this -> data [ $this -> alias ] [ 'email' ] = Security::rijndael($this->data[$this->alias]['email'], Configure::read('Security.key'), 'encrypt'); 
    } 
    if (isset ($this -> data [ $this -> alias ] [ 'address' ])) { 
    $this -> data [ $this -> alias ] [ 'address' ] = Crypt :: encrypt ($this -> Data [ $this -> alias ] [ 'address' ]) ; 
    } 

} 

afterFind Fonction

public function afterFind($results = array(),$primary = false) { 

    foreach ($results as $key => $Val) { 
     if (isset ($Val [ 'User' ])) { 
      if (array_key_exists ('email' , $Val [ 'User' ])) { 
       $results [ $key ] [ 'User' ] [ 'email' ] = Security::rijndael($Val[ 'User' ] [ 'email' ], Configure::read('Security.key'), 'decrypt'); 

      } 
if (array_key_exists ('address' , $Val [ 'User' ])) { 
       $results [ $key ] [ 'User' ] [ 'email' ] = Security::rijndael($Val[ 'User' ] [ 'address' ], Configure::read('Security.key'), 'decrypt'); 

      } 

     } 
    }return $results; 


} 

source: http://be-hase.com/php/239/

Questions connexes