【问题标题】:Cakephp encrypt an decrypt with RIJNDAELCakephp 使用 RIJNDAEL 加密解密
【发布时间】:2013-08-15 09:17:02
【问题描述】:

我的模型中有一个 beforeSave 和 afterFind 函数。函数加解密字符串成功:

    public function beforeSave($options = array()) {
   foreach($this->encryptedFields as $fieldName){
    if(!empty($this->data[$this->alias][$fieldName])){
        $this->data[$this->alias][$fieldName] = Security::rijndael($this->data[$this->alias][$fieldName], Configure::read('Security.key'), 'encrypt');
    }
}
return true;

}

但是。如果我这样做

    $mobileno = 1234
    $mobile = Security::rijndael($mobileNo, Configure::read('Security.key'), 'encrypt');

然后我运行查询,例如:

   select * from table where mobileno = $mobileno;

我无法得到结果。因为现在我上面加密的mobileno与db中的加密手机号码不同。

【问题讨论】:

    标签: cakephp encryption cakephp-2.0 cakephp-2.1 rijndael


    【解决方案1】:

    那是因为Security::rijndael() 在每次调用时都会使用随机的initialization vector

    为了解决这个问题,您必须使用固定的 IV,但这会降低安全性,所以这可能不是一个好主意!

    对于这种情况,我通常使用确定性加密另外加密值,并存储HMAC hash不是常规哈希!还应该使用与用于加密的密钥/密钥不同的密钥/密钥! ) 的附加列中的该值,这样可以使用确定性加密值的哈希轻松完成选择,并且您会注意到完全失去了非确定性加密的改进安全性。

    如果您不能使用这种技术(即使用不同的值来识别记录),那么您可能无法绕过选择所有数据集、解密它们并手动搜索相关记录。

    如果您的 DBMS 支持 AES 加密/解密,您可以尝试使用该功能,它的性能很可能比使用 PHP 解密和选择要好。但请务必评估通过将加密密钥暴露给 DBMS 可能引入的可能与安全相关的陷阱!

    【讨论】:

    • 感谢您的回答.. 现在我将使用散列技术
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多