Hi,
I have a table where I am storing driver license details. In the database, the field is encrypted using MySQL AES_ENCRYPT. However, I am having a difficulty in getting the un-encrypted values using models.
The approach I have tried follows:
For some reason, the AES_DECRYPT part doesnt seem to get appended to the query and I end up with the encrypted version of the license. Any pointers in this direction would be greatly appreciated.
I have a table where I am storing driver license details. In the database, the field is encrypted using MySQL AES_ENCRYPT. However, I am having a difficulty in getting the un-encrypted values using models.
The approach I have tried follows:
class User extends CActiveRecord { public static function model($className=__CLASS__) {...} public function tableName() {...} public function rules() {...} public function relations() {...} public function attributeLabels() {...} public function search() {...} protected function afterFind() { list($this->birth_year, $this->birth_month, $this->birth_day) = explode('-', $this->birthday); $this->origPassword = $this->password; $this->origDriversLicence = $this->user_drivers_license; $this->origDriversLicenseState = $this->user_drivers_license_state; } public function beforeSave() { if (!parent::beforeSave()) return false; $this->password = $this->password == $this->origPassword ? $this->password : generate_new_hash($this->password); $this->user_drivers_license = $this->user_drivers_license == $this->origDriversLicence ? $this->user_drivers_license : new CDbExpression("AES_ENCRYPT('$this->user_drivers_license','" . self::getEncryptionKey() . "')"); $this->user_drivers_license_state = $this->user_drivers_license_state == $this->origDriversLicenseState ? $this->user_drivers_license_state : new CDbExpression("AES_ENCRYPT('$this->user_drivers_license_state','" . self::getEncryptionKey() . "')"); return true; } public function defaultScope() { return array( 'select'=>array( '*', "AES_DECRYPT('$this->user_drivers_license','" . self::getEncryptionKey() . "')" => 'user_drivers_license', "AES_DECRYPT('$this->user_drivers_license_state','" . self::getEncryptionKey() . "')" => 'user_drivers_license_state' ), ); } }
For some reason, the AES_DECRYPT part doesnt seem to get appended to the query and I end up with the encrypted version of the license. Any pointers in this direction would be greatly appreciated.