我是yii2的新用户,在我的应用程序中,我从用户那里收到另一个系统的用户名和密码 但我不希望将密码存储为纯文本 所以我决定在存储之前加密密码。
更新
我的观点:
public function actionView($id)
{
$model = $this->findModel($id);
if($model->uid !== Yii::$app->user->identity->id)
return $this->redirect('index');
$model->instapass = Yii::$app->security->decryptByPassword($model->instapass, 'somekey');
var_dump($model->instapass);
return $this->render('view', [
'model' => $model,
]);
}
我的更新:
public function actionUpdate($id)
{
$model = $this->findModel($id);
if( $model->uid !== Yii::$app->user->identity->id)
return $this->redirect('index');
$result = $model->load(Yii::$app->request->post());
if(!$result || !$model->validate()) {
$model->instapass = Yii::$app->security->decryptByPassword($model->instapass, 'somekey');
return $this->render('update', [
'model' => $model,
]);
}
$model->instapass = Yii::$app->security->encryptByPassword($model->instapass, 'somekey');
if ($model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
编辑代码,使我更清楚如何验证值。
我无法对密码进行哈希处理,因为我的脚本必须能够在需要时解密密码。
更新代码工作正常,但在视图中decryptByPassword
方法始终返回false。
任何人都可以帮我找到问题所在?
感谢。
更新
当我在更新页面encryptbypassword
中输入123时,生成这样的(存储在数据库中):
+?????OrS?-05ff75d8f4d6531f9bf1d6cab3fdecddd72fc541e3846f12d96e383286f122f1??%*?B0e
正如您所看到的,某些字符无法读取。也许这就是问题所在。
更新(已解决问题)
我在打印或存储加密字符串后发现它们已损坏,然后我在存储字符串和base64_decode之前使用了base64_encode,然后将字符串发送到decrypt方法,现在它可以工作了。我不知道使用base64_encode解码是否正确但现在可以正常使用!
如果有人知道更好的方式,请告诉我
感谢。