Doctrine加密列

时间:2017-06-19 15:40:19

标签: php symfony encryption doctrine-orm

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

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

/**
 * @ORM\Column(name="secret", type="string")
 * @Encrypted
 */
private $secret;

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

3 个答案:

答案 0 :(得分:5)

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

  

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

     

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

     

ambta / DoctrineEncryptBundle 安全,它使用旧的加密函数和编程错误,例如在ECB模式下提供IV(什么都不做)

我以为我会留下这个以防万一,因为我正在寻找同样的功能。

更新3

(2018年12月16日)

过去几天一直在使用我们自己的加密模块。所以如果你带着对Zend Framework 3 + Doctrine模块的希望来到这里,have a look at mine

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

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

分别使用@Encrypted@Hashed注释启用属性的加密和散列。

其他:

  • 加密&解密适配器,订户&使用别名提供服务(用于非事件使用),因此您可以覆盖这些以提供您自己的
  • 仅提供@Encrypted@Hashed以启用使用情况。
  • @Encrypted获取type选项以尝试在解密时返回该类型(postLoad

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

答案 1 :(得分:4)

你可以使用这个包

https://github.com/ambta/DoctrineEncryptBundle

示例:

/**
 * @Encrypt
 */
protected $secret;

答案 2 :(得分:0)

您无需使用捆绑包或学说的生命周期。 为此,您可以创建自己的教义定制类型,创建教义事件列表,并在该类中注入加密器。在您的自定义类型中,您可以访问此事件列表获取加密器,现在您可以加密到数据库中并从数据库解密。

这是一个小背板,适合用于本用例! 我将通过博客文章更新答案。