我有一些敏感数据,我想在数据库中保持加密,并在代码中即时解密它。由于它是现有应用程序,因此我希望加密/解密过程在管道中尽可能低地运行,因此不必修改服务级别。我的第一个解决方案是修改所选属性的getter和setter,使其通过我的加密助手运行。然后我认为将其包装在属性中会很好。发现可以实现此功能的Post Sharp扩展名,但对于这种情况似乎有点过头了。还有其他选择可以实现我的目标吗?
最佳答案
根据您使用EF的方式,您可以在EF DbContext之上构建包装器,EF DbContext是一个通用存储库,您可以在其中插入一些钩子(拦截器)。
这些拦截器之一将是类似于ICryptographyInterceptor之类的东西,它将根据实体类型处理用于加密(在插入时)或解密(在检索时)的逻辑,并且不会污染您的业务逻辑或模型,因为这些拦截器将处理此任务。
可以在here中找到现有的实现。
如果项目对于此类更改而言过于复杂,那么用于转换实体的ICryptographyService可能是一个更好的解决方案。
关于c# - 替代 getter 和 setter 的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34997016/