Mysql / Codeigniter - 加密/解密用户数据安全 - 最佳实践

时间:2013-04-04 06:01:18

标签: php mysql codeigniter encryption

我正在建立一个私人网站,每个用户都拥有私人数据。我想为他们的内容提供良好的安全级别。为此,我计划:

- 在整个网站范围内使用SSL(网站不大,所以我想我会去全网站的ssl) - 我使用我的codeigniter配置加密密钥用crypt()哈希用户密码。

我想让用户能够选择部分或全部私人帖子在数据库中加密。

我想让他们指定一个私钥,我将用它来加密帖子正文,然后将其插入数据库字段。我希望他们负责他们在哪里使用哪个密钥。他们可以使用一个键,也可以选择使用不同的键。

  • 对于posts表格列有什么特别的考虑吗?现在,该字段创建为mediumtext utf8_unicode_ci

  • 假设一个强有力的证明协议将支持使用SSL,我还能做些什么来为我的用户提供他们的数据尽可能安全的感觉?

1 个答案:

答案 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是您要加密或解密的数据