Experimental: add function to encrypt sensitive data in database

This commit is contained in:
Regis Houssin
2009-06-27 07:08:35 +00:00
parent 18e7293cae
commit 163433f7b0
2 changed files with 73 additions and 22 deletions

View File

@@ -3,7 +3,7 @@
* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
* Copyright (C) 2005-2007 Regis Houssin <regis@dolibarr.fr>
* Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -72,10 +72,10 @@ class DoliDb
/**
\brief Ouverture d'une connexion vers le serveur et <EFBFBD>ventuellement une database.
\param type Type de base de donn<EFBFBD>es (mysql ou pgsql)
\param host Addresse de la base de donn<EFBFBD>es
\param user Nom de l'utilisateur autoris<EFBFBD>
\brief Ouverture d'une connexion vers le serveur et eventuellement une database.
\param type Type de base de donnees (mysql ou pgsql)
\param host Addresse de la base de donnees
\param user Nom de l'utilisateur autorise
\param pass Mot de passe
\param name Nom de la database
\param port Port of database server
@@ -581,7 +581,7 @@ class DoliDb
* \param test chaine test
* \param resok resultat si test egal
* \param resko resultat si test non egal
* \return string chaine format<EFBFBD> SQL
* \return string chaine formate SQL
*/
function ifsql($test,$resok,$resko)
{
@@ -690,8 +690,8 @@ class DoliDb
}
/**
\brief R<EFBFBD>cup<EFBFBD>re l'id gen<EFBFBD>r<EFBFBD> par le dernier INSERT.
\param tab Nom de la table concern<EFBFBD>e par l'insert. Ne sert pas sous MySql mais requis pour compatibilit<EFBFBD> avec Postgresql
\brief Recupere l'id genere par le dernier INSERT.
\param tab Nom de la table concernee par l'insert. Ne sert pas sous MySql mais requis pour compatibilite avec Postgresql
\return int id
*/
function last_insert_id($tab)
@@ -703,8 +703,58 @@ class DoliDb
// Next function are not required. Only minor features use them.
//--------------------------------------------------------------
/**
* \brief Encrypt sensitive data in database
* \param field Field name to encrypt
* \param cryptType Type of encryption (2: AES (recommended), 1: DES , 0: no encryption)
* \param cryptKey Encryption key
* \return return Field to encrypt if used
*/
function encrypt($field, $cryptType=0, $cryptKey='')
{
$return = $field;
if ($cryptType && !empty($cryptKey))
{
if ($cryptType == 2)
{
$return = 'AES_ENCRYPT('.$field.',\''.$cryptKey.'\')';
}
else if ($cryptType == 1)
{
$return = 'DES_ENCRYPT('.$field.',\''.$cryptKey.'\')';
}
}
return $return;
}
/**
* \brief Decrypt sensitive data in database
* \param field Field name to decrypt
* \param cryptType Type of encryption (2: AES (recommended), 1: DES , 0: no encryption)
* \param cryptKey Encryption key
* \return return Field to decrypt if used
*/
function decrypt($field, $cryptType=0, $cryptKey='')
{
$return = $field;
if ($cryptType && !empty($cryptKey))
{
if ($cryptType == 2)
{
$return = 'AES_DECRYPT('.$field.',\''.$cryptKey.'\')';
}
else if ($cryptType == 1)
{
$return = 'DES_DECRYPT('.$field.',\''.$cryptKey.'\')';
}
}
return $return;
}
/**
\brief Renvoie l'id de la connexion
@@ -751,7 +801,7 @@ class DoliDb
/**
\brief Liste des tables dans une database.
\param database Nom de la database
\param table Filtre sur tables <EFBFBD> rechercher
\param table Filtre sur tables a rechercher
\return array Tableau des tables de la base
*/
function DDLListTables($database, $table='')
@@ -771,19 +821,19 @@ class DoliDb
}
/**
\brief Cr<EFBFBD>e une table
\brief Cree une table
\param table Nom de la table
\param fields Tableau associatif [nom champ][tableau des descriptions]
\param primary_key Nom du champ qui sera la clef primaire
\param unique_keys Tableau associatifs Nom de champs qui seront clef unique => valeur
\param fulltext Tableau des Nom de champs qui seront index<EFBFBD>s en fulltext
\param key Tableau des champs cl<EFBFBD>s noms => valeur
\param fulltext Tableau des Nom de champs qui seront indexes en fulltext
\param key Tableau des champs cles noms => valeur
\param type Type de la table
\return int <0 si KO, >=0 si OK
*/
function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
{
// cl<EFBFBD>s recherch<EFBFBD>es dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
// cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
// ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
$sql = "create table ".$table."(";
$i=0;
@@ -847,7 +897,7 @@ class DoliDb
}
/**
\brief d<EFBFBD>crit une table dans une database.
\brief decrit une table dans une database.
\param table Nom de la table
\param field Optionnel : Nom du champ si l'on veut la desc d'un champ
\return resource
@@ -865,13 +915,13 @@ class DoliDb
* \brief Insert a new field in table
* \param table Nom de la table
* \param field_name Nom du champ a inserer
* \param field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du param<EFBFBD>tre]
* \param field_desc Tableau associatif de description du champ a inserer[nom du parametre][valeur du parametre]
* \param field_position Optionnel ex.: "after champtruc"
* \return int <0 si KO, >0 si OK
*/
function DDLAddField($table,$field_name,$field_desc,$field_position="")
{
// cl<EFBFBD>s recherch<EFBFBD>es dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
// cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
$sql .= $field_desc['type'];
@@ -919,8 +969,8 @@ class DoliDb
/**
\brief Create a user
\param dolibarr_main_db_host Ip serveur
\param dolibarr_main_db_user Nom user <EFBFBD> cr<EFBFBD>er
\param dolibarr_main_db_pass Mot de passe user <EFBFBD> cr<EFBFBD>er
\param dolibarr_main_db_user Nom user a creer
\param dolibarr_main_db_pass Mot de passe user a creer
\param dolibarr_main_db_name Database name where user must be granted
\return int <0 si KO, >=0 si OK
*/