Yii2安全:$ app-> security-> decryptByPassword返回false

时间:2017-01-12 14:12:13

标签: yii2 yii2-advanced-app

我是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解码是否正确但现在可以正常使用!
如果有人知道更好的方式,请告诉我 感谢。

0 个答案:

没有答案