2017-08-25 61 views
-1

我在Eclipse Java中使用Tomcat为我的Web应用程序执行了登录页面,并且它正在运行。我也连接到Oracle数据库。现在我想哈希我的密码,使我的应用程序比较通过键盘引入的密码的哈希码和数据库中密码的代码(如果哈希代码相同,则密码正确)。我用Java编写了一些用于散列密码的代码。在数据库中散列密码

你能帮我提一些关于如何在数据库中散列代码的方法吗?我怎样才能存储散列的密码?

+0

您可以先开始展示您到目前为止的内容。除此之外,密码是一个字符串,哈希也是一个,那么存储哈希而不是纯字符串有什么问题?有一件事你应该考虑在你的哈希(不直接与你的问题相关):添加一个静态和动态的盐来提高哈希的安全性。 – Thomas

+2

不幸的是,你的问题归结为“有人请帮助我”。但是我们并不认为这个请求在本网站的范围内是* questions *。请仔细阅读[this](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question)来理解为什么是这样。然后考虑删除这个问题,并在这个社区的范围内提出一个新的,更精确的问题。或者,您可以返工并改进此问题。谢谢! – GhostCat

+0

您是否使用J2EE身份验证? –

回答

0

您可以将散列的密码作为varchar列存储在数据库中。

+0

这看起来像一个半熟的评论比答案。 – GhostCat

+0

@GhostCat:对于通用问题,没有太多具体的答案。该应用程序需要将密码存储在数据库中(如果Dora愿意实施,则需要盐)。的确,问题很广泛,我们不知道真正困扰作者的是什么.. – gusto2

+0

@slim BCrypt哈希示例:'$ 2a $ 04 $ ikuprq9tq7Kd2x3yHrdJ8uHd8Vr5EOfHKEa2Zazg/52iVn2fwd5M'。这不是一个整数:它是一个'$',接着是版本'2a',后面跟着分隔符'$',接着是循环'04'的数量,后面跟着分隔符'$',后面跟着散列。我会强烈地考虑使用这个字符串,而不是试图做一些它。 –

1

典型的哈希算法返回一个字节数组。例如,Java的MessageDigest

byte[] digest = messageDigest.digest(); 

不管你喜欢,你都可以存储这个。你也将需要存储:

  • 盐,如果使用的话(你应该)
  • A“版本号”,以确定您所使用的哈希算法。
    • 这是如此,如果有一天你改变算法,你知道哪一个 旧的条目使用。

你可以有三列,hash varbinarysalt varbinaryversion integer

然而这是相当常见的所有三种编码成单一的varchar:

  • 2字符的版本(一个十六进制数)
  • 固定数目的盐字符(十六进制或BASE64的 - 宽取决于你的算法,将与版本而异)
  • 的哈希固定数目的字符(十六进制或Base64)

编码为可打印的ASCII字符使得它便于目测数据,以您选择的协议进行传输等。