Laravel Eloquent - 随时加密/解密数据

2023-12-29

我可以用Crypt加密/解密我的数据。我想加密数据库中的一些信息(例如姓名、电子邮件、电话号码等)。

假设我希望对所有内容进行加密,我希望能够在后台自行执行此操作,我可以通过覆盖create and save功能:

// For instance, the save() function could become
public function save(array $options = array())
{
    foreach ($this->attributes as $key => $value)
    {
        if (isset($value)) $this->attributes[$key] = Crypt::encrypt($value);
    }
    return parent::save($options);
}

现在,我希望以相同的方式执行解密,这样当我说User::find($id),返回的$user已经解密了。还有其他功能,例如firstOrFail() get() first()以及一切工作。

我还希望在使用关系时扩展此功能(所以User::with('someOtherTable')->find($id)也工作)。

这可能吗?如果这是不可能的,我正在考虑创建一个辅助函数decyrpt()

function decrypt($array)
{
    if (!is_array($array)) return Crypt::decrypt($array);

    $result = [];

    foreach($array as $key => $value) $result[$key] = decrypt($value);

    return $result;
}

首先通过这个传递我的所有结果,然后开始使用它们,但如果 Laravel 能够提供这个,或者如果有一个“Laravel Way”来做到这一点,那就更好了。


加密其实没有意义一切。例如,您永远不想加密主键;这甚至没有意义。同样,您可能不想加密日期字段;您将无法对它们执行任何类型的 SQL 查询。

考虑到这一点,您可以尝试这样的事情:

class BaseModel extends Eloquent {

    protected $encrypt = [];

    public function setAttribute($key, $value)
    {
        if (in_array($key, $this->encrypt))
        {
            $value = Crypt::encrypt($value);
        }

        return parent::setAttribute($key, $value);
    }

    public function getAttribute($key)
    {
        if (in_array($key, $this->encrypt))
        {
            return Crypt::decrypt($this->attributes[$key]);
        }

        return parent::getAttribute($key);
    }

    public function attributesToArray()
    {
        $attributes = parent::attributesToArray();

        foreach ($attributes as $key => $value)
        {
            if (in_array($key, $this->encrypt))
            {
                $attributes[$key] = Crypt::decrypt($value);
            }
        }

        return $attributes;
    }

}

然后让所有模型扩展这个模型,并设置$encrypt您想要为该特定模型加密的任何列的属性。


P.S.如果你想使用 Eloquent 的访问器功能,你必须多花点功夫。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel Eloquent - 随时加密/解密数据 的相关文章

  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 在 Eloquent 中定义自定义属性

    我的数据库中有 3 个不同的字段 city state country 如何在 Eloquent 中定义另一个属性以从这 3 个字段返回一个字符串 第一种方法 但不起作用 protected address public function
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • Laravel,从 JSON 中删除 null Eloquent 对象属性

    有没有一种优雅的方法从 Eloquent 对象中删除 NULL 值 我的对象嵌套有关系 这个特定的调用可能会长达数千行 所以我尝试这样做的主要原因是为用户节省带宽 但服务器性能也是一个考虑因素 My code data locations
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • PHP Laravel:未找到特征

    我在命名空间和使用方面遇到一些问题 我收到此错误 未找到特征 Billing BillingInterface 这些是我的 Laravel 应用程序中的文件 计费 php namespace Billing BillingInterface
  • 如何更新 Laravel 编辑视图中的图像?

    在 Laravel 中 我的编辑视图中有一个名为 个人资料图片 的字段 每当我单击 编辑 按钮时 我都会在编辑视图中从数据库中获取所有值 但没有获得图像 并且如果每当我每次单击 提交 按钮时 我都必须如果没有上传图像 我无法进一步处理我想要
  • Laravel - 保存在存储文件夹中的图像不向用户显示

    我有这段代码可以将图像保存在 storage app uploads 文件夹中 image main Image where property id id gt get file request gt file file destinati
  • 如何对文件进行加密和解密?

    I use CipherOutputStream在java中对文件进行加密和解密 但是输入文件 gt 117字节无法加密 我使用RSA算法公钥长度1024字节 cipher init Cipher ENCRYPT MODE secKey S
  • 在 Laravel 中将自定义/新类文件放在哪里?

    我有关于如何使用 Yelp Fusion API 的 PHP 示例 它用OAuth php file https github com Yelp yelp api blob master v2 php lib OAuth php有几个班级
  • RSA SignatureException:签名长度不正确

    我在签署 rsa 签名时遇到问题 我有一个用私钥加密的签名 然而 当我尝试使用公钥验证它时遇到问题 我得到以下异常 java security SignatureException Signature length not correct
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 使用 Netty 的 UDP 服务器中丢失大量 UDP 请求

    我用 Netty 编写了一个简单的 UDP 服务器 它只是在日志中打印出收到的消息 帧 为此 我创建了一个简单的帧解码器解码器和一个简单的消息处理程序 我还有一个可以顺序和 或并行发送多个请求的客户端 当我配置我的客户端测试器以顺序发送数百
  • 与具有量化替代方案的较短正则表达式表示法相比,展开循环有什么优势?

    要求 两个表达式 exp1 and exp2 我们需要匹配两者中的一个或多个 所以我想出了 exp1 exp2 但是在某些地方 我看到使用了以下内容 exp1 exp2 exp1 两者有什么区别 你什么时候会使用其中一种而不是另一种 希望有
  • DotNetOpenAuth OAuth 1.0a 消费者自动化

    我对 oAuth 1 0a 的自动化有疑问 我需要代表用户访问 oAuth 提供商的 REST API 提供商已实施 oAuth 版本 1 0a 正手请原谅我对 oAuth 的无知 这对我来说是一个新领域 我正在开发一个 NET MVC 5
  • 使用“dplyr”保存残差

    我想使用 dplyr 对 data frame 进行分组 拟合线性回归并将残差保存为原始未分组 data frame 中的列 这是一个例子 gt iris gt select Sepal Length Sepal Width gt grou
  • jsf-带有输入参数的验证器

    这是我的 xhtml 页面的一部分
  • Pandas:如何对子类别内的前 N ​​个观察结果进行子集(和求和)?

    在这样的 pandas 数据框中 year month passengers 0 1949 January 112 1 1949 February 118 2 1949 March 132 3 1949 April 129 4 1949 M
  • 使用 sbt 构建命令行应用程序

    有人成功关注http www scala sbt org 0 13 docs Command Line Applications html http www scala sbt org 0 13 docs Command Line Appl
  • 带有 EventLogAppender 的 log4net 不记录

    使用以下配置不会发生任何情况 应用程序配置
  • 使用flask-uploads上传文件

    我正在尝试使用上传文件烧瓶上传 http pythonhosted org Flask Uploads 扩大 问题是 每次我似乎找到解决方案时 我都会资助另一个问题 而且我觉得文档很神秘 这是代码 from flask ext upload
  • Artillery:如何将 artillery html 报告图表发布到 Azure DevOps CI/CD 管道中?

    我正在处理一个要求 我必须使用 artillery 工具生成负载测试报告并将报告统计信息发布到我们的 Azure DevOps 管道中 Artillery 将报告生成为 html 格式 我想将其显示到 Azure DevOps 管道中 我该
  • 如何计算两个列表的所有交错?

    我想创建一个接受两个列表的函数 不保证列表的长度相等 并返回两个列表之间的所有交错 Input 两个列表的大小不必相等 Output 两个列表之间保留原始列表顺序的所有可能的交错 Example AllInter 1 2 3 4 gt 1
  • Angular2 种子项目中项目目录之外的文件

    我如何包含项目目录 Angular 2 之外的文件 我的文件夹结构是这样的 WebApp angular2 seed Shared business logic files Mobile App 我在网络应用程序项目的文件中给出了正确的文件
  • 为什么SmtpClient.SendAsync只能调用一次?

    我正在尝试使用 SmtpClient 在 NET 中编写通知服务 出于完全合法的非垃圾邮件目的 最初我只是循环遍历每条消息并发送它 但是这很慢 我想提高速度 因此 我改用 SendAsync 但现在在第二次调用时出现以下错误 An asyn
  • 计算 itertools.product() 的第 n 个结果

    我正在尝试计算 itertools product 的第 n 个结果 test list product 01 repeat 3 print test desired output test 0 print desired output 所
  • 如何使用 id 删除嵌套的 JSON 对象

    在我的应用程序中 我创建了一个基于 JSON 的 JavaScript 对象 类似于以下内容 name root id 112 children name child one id 231 children name grand child
  • Python 在不需要时更改文件权限

    知道为什么下面的 Python 脚本在运行后将文件夹权限更改为只读吗 它运行一次并删除文件夹中的所有文件 但当它再次运行时 会出现 Windows 错误 5 访问被拒绝 因为脚本将文件夹的权限更改为只读 我看不出它的作用或如何避免它 谢谢
  • 如何获得 Go 中的终端大小?

    如何在 Go 中获取终端大小 在 C 语言中 它看起来像这样 struct ttysize ts ioctl 0 TIOCGWINSZ ts 但是如何在 Go 中访问 TIOCGWINSZ cgo编译器目前无法处理c函数中的变量参数和c头文
  • PyTorch Cuda 与 anaconda 不可用

    我正在使用 anaconda 来调节我的环境 对于一个项目 我必须使用 GPU 进行网络训练 我在我的项目中使用 pytorch 并且正在尝试让 CUDA 工作 我安装了cudatoolkit numba cudnn 不过 当我尝试这个命令
  • 如何使用 write() 或 fwrite() 将数据写入终端(stdout)?

    我正在尝试加快我的 C 程序的速度 以便更快地输出数据 目前我正在使用printf 向外界提供一些数据 它是连续的数据流 因此我无法使用 return data 我该如何使用write or fwrite 将数据提供给console而不是文
  • Laravel Eloquent - 随时加密/解密数据

    我可以用Crypt加密 解密我的数据 我想加密数据库中的一些信息 例如姓名 电子邮件 电话号码等 假设我希望对所有内容进行加密 我希望能够在后台自行执行此操作 我可以通过覆盖create and save功能 For instance th