我正在建立一个私人网站,每个用户都拥有私人数据。我想为他们的内容提供良好的安全级别。为此,我计划:
- 在整个网站范围内使用SSL(网站不大,所以我想我会去全网站的ssl)
- 我使用我的codeigniter配置加密密钥用crypt()
哈希用户密码。
我想让用户能够选择部分或全部私人帖子在数据库中加密。
我想让他们指定一个私钥,我将用它来加密帖子正文,然后将其插入数据库字段。我希望他们负责他们在哪里使用哪个密钥。他们可以使用一个键,也可以选择使用不同的键。
对于posts表格列有什么特别的考虑吗?现在,该字段创建为mediumtext utf8_unicode_ci
。
假设一个强有力的证明协议将支持使用SSL,我还能做些什么来为我的用户提供他们的数据尽可能安全的感觉?
答案 0 :(得分:2)
db字段正常。
您可以使用unique encryption key for each user,
,因此数据库中的数据将由该密钥加密long unique hash
然后你可以使用2个独立的数据库(而不是表格)
1 db for users encryption keys
1 db for users data encrypted by keys
然后我与你分享使用encrypt/decrypt library
的{{1}},这是我发现的最好的:
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
是您要加密或解密的数据