Java 应该在哪里进行加密-在应用程序或数据库级别?
为了保护web应用程序的敏感数据,出现了这样一个问题:使用jasypt(用于Java)在应用程序级别加密并将加密数据保存到数据库,还是使用(例如)MSSQL 2012的加密机制,这是最佳做法 在Java 应该在哪里进行加密-在应用程序或数据库级别?,java,sql-server,security,encryption,Java,Sql Server,Security,Encryption,为了保护web应用程序的敏感数据,出现了这样一个问题:使用jasypt(用于Java)在应用程序级别加密并将加密数据保存到数据库,还是使用(例如)MSSQL 2012的加密机制,这是最佳做法 在 安全问题 性能问题 这里的最佳实践是什么 编辑: 关于应用程序类型的更多细节:它是一个web门户,用户将敏感数据上传到门户,门户所有者对该数据进行评估。它将在客户站点上使用,因此我们对访问服务器的用户的控制有限,对应用服务器的控制也有限,一般来说,数据应该通过网络进行编组发送,并在另一端进行解组。然后,
关于应用程序类型的更多细节:它是一个web门户,用户将敏感数据上传到门户,门户所有者对该数据进行评估。它将在客户站点上使用,因此我们对访问服务器的用户的控制有限,对应用服务器的控制也有限,一般来说,数据应该通过网络进行编组发送,并在另一端进行解组。然后,在存储数据时,您可以对其进行加密并存储。AFAIK,不会有重大的性能问题,因为性能与加密无关 下一步,关于安全性的问题是,数据应该在代码级别进行加密,以确保
数据
通过电线时是安全的
最后,相同的
数据将保存在数据库中。这将确保通过网络和数据容器的安全。这一切归结为信任问题。您是否完全控制应用程序服务器?威胁级别是多少?敏感数据如何在该级别上受到损害?那么,它在db级别上如何?你能控制数据库吗?谁有权使用它呢
你的问题不能笼统地回答。这完全取决于您想要保护的威胁类型
- 通常,如果在应用程序中加密,则很难使用高效的数据库检索技术。通常,索引会以一种有意义的方式停止工作。排序变得困难,等等
- 如果在db级别进行加密,则应考虑对传输进行临时加密(考虑SSL或SSH隧道)
- 如果您真的想保护数据,性能应该是一个次要问题。我不是这方面的专家,但我认为对于应用程序数据加密和数据库级别,都有性能良好的解决方案
您不认为这应该取决于应用程序的类型吗?我的意思是,如果要发送的数据更敏感,那么它应该像在数据库中一样进行加密。例如一些绝密的军事数据。是的,这正是我一般指定的原因。即使我们考虑简单的数据传输通过我们的网络,它是加密在表示层,紧随应用层后,在七层OSI模型。所以您是对的,这是特定于用户设计和体系结构要求的。@SURESH ATTA“因为性能与加密无关”。我真的不同意这一点。加密算法是性能密集型的,不同的实现(基于Java/SQL)可能有不同的复杂性。@SURESH ATTA:当然,加密与性能有关-至少它会消耗处理器时间。是的,会有一点时间复杂性,但这在两端都有好处