Ejemplo n.º 1
0
 /**
  * Requête de lecture
  */
 private function select()
 {
     // Par défault utilise un select *
     \Origami\DB::get($this->config->getDataBase())->select("{$this->config->getTable()}.*");
     // Si le cryptage est activé et si il y a des champs cryptés
     if ($this->config->getOrigami('encryption_enable')) {
         // Les champs cryptés
         $fields = $this->config->getFieldEncrypt();
         // Si il y a des champs cryptés
         if (!empty($fields)) {
             foreach ($fields as $field) {
                 \Origami\DB::get($this->config->getDataBase())->select("CONVERT(AES_DECRYPT(FROM_BASE64(`{$field['name']}`), UNHEX('{$this->config->getOrigami('encryption_key')}'), UNHEX(`vector`)) USING 'utf8') AS `{$field['name']}`", FALSE);
             }
         }
     }
     // Si le binaire est activé et si il y a des champs binaires
     if ($this->config->getOrigami('binary_enable')) {
         // Les champs binaires
         $fields = $this->config->getFieldBinary();
         // Si il y a des champs binaires
         if (!empty($fields)) {
             foreach ($fields as $field) {
                 \Origami\DB::get($this->config->getDataBase())->select("TO_BASE64(`{$field['name']}`) AS `{$field['name']}`", FALSE);
             }
         }
     }
     return \Origami\DB::get($this->config->getDataBase());
 }
Ejemplo n.º 2
0
 /**
  * Requête d'écruture
  */
 private function write()
 {
     // Liste des champs modifiés
     $fields = $this->_storage->get(NULL, TRUE);
     // Si il y a des champs modifiés
     if (!empty($fields)) {
         // Si le cryptage est activé et si il y a un champ vecteur
         if ($this->_config->getOrigami('encryption_enable') && $this->_storage->get('vector') !== FALSE) {
             // Récupération du champ vecteur
             $vector = $this->_storage->get('vector');
             $value = $vector->getValue();
             // Si le vecteur n'a pas de valeur
             if (empty($value)) {
                 // Créer un vecteur
                 $this->_storage->set('vector', random_string('unique'));
                 // Recharge l'object le vecteur
                 $vector = $this->_storage->get('vector');
                 // Prépare l'insertion vecteur
                 $this->db()->set($vector->getName(), $vector->getValue(), TRUE);
             }
         }
         // Parcours les champs modifiés
         foreach ($fields as $field) {
             // Si le cryptage est activé et qu'il y a des champs crypté
             if ($this->_config->getOrigami('encryption_enable') && $field->getEncrypt()) {
                 // Récupération du champ vecteur
                 $vector = $this->_storage->get('vector');
                 // Encryptage de la valeur
                 $this->db()->set("`{$field->getName()}`", "TO_BASE64(AES_ENCRYPT('{$this->db()->escape_str($field->getValue())}', UNHEX('{$this->_config->getOrigami('encryption_key')}'), UNHEX('{$vector->getValue()}')))", FALSE);
                 // Si le champ est un binaire
             } else {
                 if ($this->_config->getOrigami('binary_enable') && $field->getBinary()) {
                     // Transformation de la valeur
                     $this->db()->set("`{$field->getName()}`", "FROM_BASE64('{$this->db()->escape_str($field->getValue())}')", FALSE);
                     // Si c'est un champ normal
                 } else {
                     $this->db()->set($field->getName(), $field->getValue(), TRUE);
                 }
             }
         }
     }
     return $this->db();
 }