ArangoDB 文档在这里讨论了几个 nonce 函数:
https://docs.arangodb.com/3.1/Manual/Appendix/JavaScriptModules/Crypto.html
我理解我会创建一个随机数,将其发送到客户端,使用随机数散列密码并将其发送到服务器的想法。但是我真的不明白这两个功能是如何协同工作来实现这一切的。
有人可以详细说明此文档和流程吗?如果我将随机数和密码散列在一起,我如何将它与已经散列的存储密码进行比较?只是在寻找有关该过程的一些指导。谢谢!
更新更多细节:
我正在研究身份验证代码。我想总的来说,我试图了解 ArangoDB 加密库中的两个函数以及它们如何协同工作。该文档没有详细说明。我在维基百科上找到了这个工作流程:https ://en.wikipedia.org/wiki/Cryptographic_nonce但我不确定我是否理解它。
- 客户端登录页面向服务器请求一个随机数。服务器提供。然后服务器是否将这个 nonce 存储为用户会话以供以后检索?
- 客户端使用来自服务器的随机数对密码进行哈希处理,客户端也创建了随机数,并将用户名、客户端随机数和加密密码发送到服务器。
- 服务器如何将散列的密码与随机数和客户端随机数与数据库中已经散列和存储的密码进行比较?与其使用随机数和随机数对密码进行哈希处理,不如只使用随机数之一作为密钥对其进行加密?
ArangoDB 加密库提供了两个函数 createNonce,这很明显,但随后它提供了 checkAndMarkNonce。这如何适应工作流程?除非我将它存储在会话变量中,否则如何检查返回的随机数?如果它与密码一起散列,我如何检查随机数?这个维基百科的例子是错的,还是我遗漏了一些关键组件?