我开始更新我的应用程序以符合GDPR。此应用程序使用最新版本的Codeigniter(我现在也更新)。我尝试使用加密'加密用户的电子邮件地址。图书馆。我设置了加密密钥,并使用$this->encryption->encrypt()
加密了我的电子邮件地址。一切都很好,直到这里,但我怎么能检查这个电子邮件地址是否在我的数据库中是唯一的?
编辑:我没有更改加密库的任何默认设置。
谢谢!
答案 0 :(得分:1)
即使我同意亚历克斯上面的评论,加密电子邮件只是矫枉过正,并且提供的好处很少,事实上,NOT required by the GDPR正如你所暗示的那样,有一种方法可以加密您的用户'电子邮件(如果您真的想要)并确保它们是唯一的是将您的UNIQUE
索引移动到电子邮件的sha256哈希值,而不是加密的电子邮件列。由于使用不同初始化向量加密的相同电子邮件地址将产生不同的输出,因此您无法将UNIQUE
索引直接放在该列上,但sha256将始终产生完全相同的结果。与sha256冲突的可能性为is essentially zero,并且在极不可能发生冲突的情况下,用户只是注意到已经在其电子邮件中注册了帐户。没什么大不了的。
答案 1 :(得分:1)
第 1 步:加载加密库
$this->load->library('encryption');
第 2 步:为配置文件 application/config/config.php 创建加密密钥
$this->encryption->create_key(16);
############### OR #############
bin2hex($this->encryption->create_key(16)); // For more user friendly cipher text
在配置文件中添加这个key
$config['encryption_key'] = hex2bin(<your hex-encoded key>);
第 3 步:用于将明文加密为密文
$plain_text = 'This is a plain-text message!';
$ciphertext = $this->encryption->encrypt($plain_text);
步骤 4: 将密文解密为纯文本
// Outputs: This is a plain-text message!
echo $this->encryption->decrypt($ciphertext);
注意:如果没有加载驱动程序,您可能需要加载驱动程序
$this->encryption->initialize(
array(
'driver' => 'openssl',
'cipher' => 'aes-256',
'mode' => 'ctr',
'key' => '123456' // OR any hash if empty then takes from config file
)
);
参考:https://codeigniter.com/userguide3/libraries/encryption.html