如何在具有相同数据库的java和nodejs中生成哈希和salt

时间:2014-01-21 08:41:31

标签: java node.js mongodb hash salt

我们正在为我们的移动(nodejs)和桌面(java)应用程序使用一个db(mongo)。

问题是,我们希望为这两个应用程序使用不同的登录/注册休息服务。现在,我们的注册模块仅在java(加密)中实现。我们使用java的SecureRandom库创建一个salt,放入db然后用它来生成密码hash。然后,当用户登录时,我们只获取用户的盐(假设它存在),然后使用db中的salt再次生成哈希密码,然后比较数据库中生成的哈希密码。

问题在于nodejs,我找不到任何模块/库,它们会生成像java中生成的那样的精确盐。

我需要在nodejs中散列未加密的密码,然后将其与java中生成的db中的散列密码进行比较。

如何解决此问题?任何帮助将非常感激。感谢。

2 个答案:

答案 0 :(得分:3)

没有必要创建完全相同的盐,因为盐只创建一次然后存储在某处。所有其他人都必须使用这种盐。因此,如果node.js具有不同的盐创建(即Math.random())即o.k.,因为

  • 你通常只在河的一边创造盐
  • 如果您在两侧创建它,则另一个必须使用它

您需要的是相同的哈希机制!这应该很简单,因为Java和node.js中有很多实现了各种哈希算法,它们彼此兼容(即md5或sha3)。

答案 1 :(得分:2)

  

问题在于nodejs,我找不到任何模块/库,它们会生成像java中生成的那样的精确盐。

如果你能找到一种方法在不同的时间产生两种完全相同的盐,那么它就会超过腌制的目的,因为最好的盐是尽可能随机的。你需要做的是从Java攻击它的数据库中获取salt并使用获取的salt来执行散列。