Doctrine加密列

use*_*660 2 php encryption symfony doctrine-orm

使用Doctrine 2Symfony 3,是否有一种自动加密列的简单方法?

理想情况下,它应该像这样工作:

/**
 * @ORM\Column(name="secret", type="string")
 * @Encrypted
 */
private $secret;
Run Code Online (Sandbox Code Playgroud)

或者,是否有支持加密的官方(或非常受欢迎)捆绑包?

rke*_*eet 6

不确定是否有任何真相,我不是加密专家,但这个回购的作者(Michael de Groot)声称"ambta"版本不安全,并提供自己的替代品.

这是由ambta创建的原始包中的一个分支,可以在这里找到:ambta/DoctrineEncryptBundle

此捆绑包通过不滚动自己的加密并使用现场验证的标准化库来更新安全性.

ambta/DoctrineEncryptBundle是固定,它使用旧的加密功能和程序设计失误等在ECB模式供给IV(其中不执行任何操作)

我以为我会离开这里以防万一它是真的,因为我正在寻找相同的功能.


更新3

(2018年12月16日)

过去几天一直在使用我们自己的加密模块.所以,如果你来这里寄希望于Zend Framework 3 + Doctrine模块,请看看我的.

标准的PHP 7.2 Sodium库和Paragonie的halite模块用于处理实际的解密/解密.

属性的加密和散列在Doctrine事件中 完成,onFlush用于存储(加密和散列)和postLoad解密.

属性的加密和散列分别使用@Encrypted@HashedAnnotation 启用.

额外:

  • 加密和解密适配器,订户和服务(用于非事件使用)是使用别名提供的,因此您可以覆盖它们以提供您自己的
  • 仅提供@Encrypted@Hashed启用使用.
  • @Encrypted需要一个type选项来试图解密时返回该类型(postLoad)

注意:更新了上述(2018-12-16)以删除我们在工作中创建的链接,并且数据的加密/散列非常重要.当我即将离开公司时,将链接更改为我自己的回购,并且在协议中,我将接管该回购,尽管我还使用其他服务更新了它.该公司(见答复历史)正在被弃用,以支持我的.


Ale*_*eri 5

你可以使用这个包

https://github.com/ambta/DoctrineEncryptBundle

例子:

/**
 * @Encrypt
 */
protected $secret;
Run Code Online (Sandbox Code Playgroud)