CakePHP的加密解密一个用RIJNDAEL算法

问题描述 投票:1回答:1

我在我的模型中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是从加密移动电话号码是在分贝不同。

cakephp encryption cakephp-2.0 cakephp-2.1 rijndael
1个回答
1
投票

这是因为Security::rijndael()使用在每次调用随机initialization vector

为了解决这个,你将不得不使用一个固定的IV,但是这会降低安全性,所以这不是一个好主意!

对于这种情况,我通常另一个字段添加到未加密的值存储在一个HMAC hash形式的表(不是常规的哈希!还应该使用比用于加密的一个不同的秘密/键!),这样的选择可以与给定值的哈希轻松完成。

如果您无法使用(即利用用于标识记录的值不同)这样的技术,那么你可能无法得到周围选择所有数据集,解密他们,并质疑手动搜索记录。

如果你的DBMS支持AES加密/解密,你可以尝试使用该功能,它很可能会表现得比解密,并与PHP更好的选择。但要确保你评估可能通过暴露的加密密钥的DBMS出台可能存在的安全隐患相关的!

© www.soinside.com 2019 - 2024. All rights reserved.