我正在使用elocryptfive加密数据库中的某些字段 - 简而言之,它是一种PHP特性,在将数据写入数据库之前加密标记为加密的属性,并在向用户显示时对其进行解密(使用{{ 1}}和其他此类方法)。
可以在this laracasts discussion中找到更简单的版本。
使用5.5之前的Laravel版本时没有任何问题。在将网站升级到laravel 5.5后,我注意到应该加密的值是以明文形式呈现的。
我已经在github包中提交了问题,请求帮助。与此同时,我尝试过几件事:
似乎它可能与5.4和5.5之间的某些变化有关,我已经尝试比较getAttribute
命名空间中的几个类但放弃了。
答案 0 :(得分:0)
再次比较laravel / framework包中5.4和5.5标签之间的变化后,我在getDirty
方法中找到了原因。
src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php
特质。foreach ($this->attributes as ...
在laravel 5.4中有:
foreach ($this->getAttributes() as ...
然后在5.5中它被改为:
getAttributes
由于getDirty()
方法是解密数据的方法之一,它看起来目前最明智的解决方案是在加密特征或使用它的应用程序模型中覆盖public function getDirty()
{
$dirty = [];
foreach ($this->attributes as $key => $value) {
if (! $this->originalIsEquivalent($key, $value)) {
$dirty[$key] = $value;
}
}
return $dirty;
}
。
修改后的方法如下所示:
[DllImport("dllname.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern double FunctionParser();