How to save encrypted data using Yii :: $ app-> security-> encryptByKey () in Yii2

This is a model.

public function genCode($width = 15) { $inputKey = $this->password(); $string = Yii::$app->security->generateRandomString($width); $this->_encrypted = Yii::$app->security->encryptByKey( $string, $inputKey ); // $decrypted = Yii::$app->security->decryptByKey( $encrypted, $inputKey, $info = null ); return $this->_encrypted; } public function saveCodeSample() { $code = new Code; $code->type = 'sample'; $code->owner_id = 1; $code->value = $this->genCode(); return $code->save(); } private function password() { $inputKey = 'averyrandomandverylongstring'; $this->_password = $inputKey; return $this->_password; } 

This is a sample controller

 public function actionTest() { $codes = new CodesSetup; return var_dump($codes->saveCodeSample()); } 

This does not give me any error, but the PROBLEM - all data is stored in the database, except for the encrypted one.

Model Rule:

 public function rules() { return [ [['type', 'owner_id', 'code'], 'required'], [['owner_id', 'status', 'created_at', 'updated_at', 'author_id', 'updater_id'], 'integer'], [['type', 'code'], 'string', 'max' => 255] ]; } 
+5
source share
2 answers

Try utf8_encode before saving, the problem arises because of the encoding of the database fields.

 $this->_encrypted = utf8_encode(Yii::$app->security->encryptByKey( $string, $inputKey )); 
+5
source

I ran into the same problem and utf8_encode / utf8_decode worked for me

 $encrypted = utf8_encode(Yii::$app->security->encryptByKey($data, $key)); $decrypted = Yii::$app->security->decryptByKey(utf8_decode($encrypted), $key); 
+6
source

Source: https://habr.com/ru/post/1215852/


All Articles