使用Doctrine 2
和Symfony 3
,有一种自动加密列的简单方法吗?
理想情况下,它应该像这样工作:
/**
* @ORM\Column(name="secret", type="string")
* @Encrypted
*/
private $secret;
或者,是否有支持加密的官方(或非常受欢迎的)捆绑包?
答案 0 :(得分:5)
不确定是否有任何真相,我不是加密专家,但this repo's作者(Michael de Groot)声称" ambta"版本不安全,并提供自己的替代品。
这是ambta创建的原始包中的一个分支,可以在这里找到:ambta / DoctrineEncryptBundle
此捆绑包通过不自行加密并使用现场验证的标准化库来更新安全性。
ambta / DoctrineEncryptBundle 不安全,它使用旧的加密函数和编程错误,例如在ECB模式下提供IV(什么都不做)
我以为我会留下这个以防万一,因为我正在寻找同样的功能。
(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)
答案 2 :(得分:0)
您无需使用捆绑包或学说的生命周期。 为此,您可以创建自己的教义定制类型,创建教义事件列表,并在该类中注入加密器。在您的自定义类型中,您可以访问此事件列表获取加密器,现在您可以加密到数据库中并从数据库解密。
这是一个小背板,适合用于本用例! 我将通过博客文章更新答案。