db フィールドは問題ありません。
使用できるunique encryption key for each user,
ので、db のデータはそのキーによって暗号化されます。long unique hash
次に、2 つの分離されたデータベース (テーブルではない) を使用できます。
1db for users encryption keys
1db for users data encrypted by keys
次に、encrypt/decrypt library
どの用途を使用AES
しているかを共有します。これは、私が見つけた最高のものです。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Crypto encrypt/decrypt Class it uses AES by $secret_key
*
* @access public
* @param array/value
* @return array/value
*/
class Crypto(){
function encrypt($data,$secret_key){
$array = array();
if(is_array($data)){
foreach($data as $key=>$value){
$array[$key] = trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$secret_key, $value,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
)
);
}
return $array;
}else{
return trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$secret_key, $data,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
)
);
}
}
function decrypt($data,$secret_key)
{
$array = array();
if(is_array($data)){
foreach($data as $key=>$value){
$array[$key] = trim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$secret_key,
base64_decode($value),
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND
)
)
);
}
return $array;
}else{
return trim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey,
base64_decode($sValue),
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND
)
)
);
}
}
}
//end class Crypto
注: $secret_key
はユーザー キーで$data
あり、暗号化または復号化するデータです。