couchdb - Ironclad 和 couch pbkdf2 哈希之间不匹配

标签 couchdb common-lisp pbkdf2 ironclad

我的问题背景: Linode KVM 实例上的 Fedora 22 64 位、CouchDB v.1.6.1、SBCL 1.2.16

CouchDB:我创建了一个密码为“testpass”的用户。 _users 数据库中相应创建的文档包含(除其他内容外):

{ ...
  "password_scheme": "pbkdf2",
   "iterations": 10,
   "name": "test",
   "roles": ["reader"],
   "type": "user",
   "derived_key": "7b0cad0d2762b448b88684332e68988e801195ad",
   "salt": "2e4bcf85f39279ab9d1e1336a00dce0e"
...}

所以在我的同一台机器上的 lisp repl 中:

REPL>(in-package :ironclad)
REPL>(byte-array-to-hex-string 
         (pbkdf2-hash-password 
             (ascii-string-to-byte-array "testpass") 
             :salt (hex-string-to-byte-array "2e4bcf85f39279ab9d1e1336a00dce0e")
             :digest 'sha1 
             :iterations 10))

"ce55610fe10bc49703f0df95adb6c9c9c71e3f8e"
REPL>

因此,ironclad 的输出 “ce55610fe10bc49703f0df95adb6c9c9c71e3f8e” 与 couch 的“7b0cad0d2762b448b88684332e68988e801195ad” 不匹配。

我已经尝试了 Ironclad 中所有受支持的摘要,但没有成功。有谁知道可能出了什么问题吗?

最佳答案

很简单:CouchDB 使用 "2e4bcf85f39279ab9d1e1​​336a00dce0e" salt 作为二进制字符串,同时使用 hex-string-to-byte-array 将其转换为字节数组。解开它会得到不同的盐。很容易检查:

(node1@127.0.0.1)1> couch_passwords:pbkdf2(<<"testpass">>, <<"2e4bcf85f39279ab9d1e1336a00dce0e">>, 10).
<<"7b0cad0d2762b448b88684332e68988e801195ad">>
(node1@127.0.0.1)2> couch_passwords:pbkdf2(<<"testpass">>, <<50,101,52,98,99,102,56,53,102,51,57,50,55,57,97,98,57,100,49,101,49,51,51,54,97,48,48,100,99,101,48,101>>, 10).
<<"7b0cad0d2762b448b88684332e68988e801195ad">>
(node1@127.0.0.1)3> couch_passwords:pbkdf2(<<"testpass">>, <<46,75,207,133,243,146,121,171,157,30,19,54,160,13,206,14>>, 10).
<<"ce55610fe10bc49703f0df95adb6c9c9c71e3f8e">>

关于couchdb - Ironclad 和 couch pbkdf2 哈希之间不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33291035/

相关文章:

couchdb - 在 Kanso 中使用 underscore.js

node.js - 在 Node.js 中生成和验证密码哈希值与 Python 的 werkzeug 相同

php - 如何获取 php hash_pbkdf2 衰减值

python - 如何使用 PyASN INTEGER (1..MAX) 在 python 中编写 ASN1 编码?

jquery - 想从 CouchDB 中的附件制作我的背景图片

size - 为什么我的 CouchDB 数据库增长如此之快?

couchdb - 如何查询 pouchdb 中已删除的文档?

algorithm - Common Lisp 中的线性递归列表差函数

lisp - common lisp中如何做动态加载(Load)

common-lisp - 重新启动是函数 "public interface"的一部分吗?在 Common Lisp 中?