如何在MongoDB中找到散列值?

时间:2017-12-28 10:08:45

标签: mongodb mongoose mongodb-query

我在nodeJS中使用mongoose库。我想在plaintext中传递密码,并匹配它的散列值,以便在集合中找到一个元素。

例如,在mysql中,我可以使用:

SELECT * FROM TABLENAME WHERE MD5(PASSWORD) = "HASHED_PASSWORD";

mysql具有MD5()功能。

mongoDB有类似之处吗?

我知道密码应该在存储之前进行哈希处理,但只是想知道MongoDB中是否可以使用

1 个答案:

答案 0 :(得分:0)

目前,从MongoDB 3.6.1开始,没有像您所描述的内置哈希函数。在大多数情况下,哈希函数可以在您的应用程序中更好地实现。

考虑您在上面发布的方案。已知MD5很弱。如果您的应用程序依赖于数据库来计算此哈希值,那么现在您遇到了一些问题:

  1. 将所有弱哈希值迁移到新哈希值时,需要对数据库进行大的更改。否则,您将面临必须保留模式的不同版本的问题,这可能并不理想。
  2. 您不能简单地用更强大的函数替换数据库中的hash()函数,并保持函数名称相同,因为这会与已存储的哈希值产生不兼容。
  3. 如果在应用程序中保留哈希函数,仍然可以使用相同的数据库和数据结构。您可以使用新算法以不同方式存储哈希值(例如,使用详细说明所使用算法的子文档和哈希字符串,而不是单个字符串),并让应用程序检测要使用的算法。