【发布时间】:2015-05-10 19:17:25
【问题描述】:
我正在为电视剧制作移动应用。基本上就像一个跟踪器,知道什么时候看什么剧集。我想将观看的剧集、用户节目等信息存储在数据库中。 (我从休息 api 获得的节目信息)
所以问题是我觉得这里不需要服务器,我只是不知道它应该做什么。
问题是我想让数据库安全。从我读过的最佳实践来看,最好的做法是使用加密强的随机数生成器创建盐,并将其添加到密码中,然后使用散列算法(例如 SHA-256)对整个内容进行散列。 然后我将哈希密码和盐存储在数据库中,当我想检查密码是否正确时,只需再次对其进行哈希处理并与数据库中的进行比较。
所以我在 Java 中有一个特殊的类可以创建这样的盐,我只需要知道在哪里以及如何对整个事物进行哈希处理。我要问的是什么。我不想创建一个只会散列密码的服务器。
另外一件事是如何实现自动登录,一旦我弄清楚了,我也想添加它。
我希望现在我想在这里完成什么更清楚。
【问题讨论】:
-
两者都不是。服务器端,在将其发送到数据库之前。在您的应用程序本身中执行此操作,而不是在数据库中。使用像
bcrypt这样的已建立的库,并且在任何情况下都不要使用你自己的加盐和散列方案。 -
我的意思是,不要自己做加盐和散列,比如尝试生成随机盐然后做 SHA-whatever。使用图书馆。除了数据库之外,肯定应该有 some 服务器端。如果您的移动应用程序直接连接到数据库,没有中间层,这意味着您将数据库凭据存储在客户端中。这是一个巨大的安全漏洞,所以我希望这不是你正在做的。 (顺便说一句,鉴于您在问题的任何地方都没有提及,我们怎么可能知道这是一个移动应用程序?)
-
@HoboSapiens: SHA-256不被认为是弱者。您可能正在考虑使用 SHA-1。
-
@ilmarikaronen 你说的很对 - 早上太早了!
-
@Greyshack 我认为这里存在根本的误解。据我了解,您需要:(1) 数据库服务器和 (2) 用 Java 编写的移动客户端。客户端将连接到服务器,检索哈希,并将其与某物进行比较。如果这就是您的意思,那么它非常不安全,因为您必须分发数据库凭据。最终用户很容易提取它们并完全控制数据库。相反,如果您要连接到设备上的仅限本地数据库,您打算如何在验证凭据之前进行连接?
标签: database security hash password-protection sha256