ironclad 和 couch pbkdf2 哈希之间的不匹配
Mismatch between ironclad and couch pbkdf2 hashing
我的问题背景:
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 使用 "2e4bcf85f39279ab9d1e1336a00dce0e"
盐作为二进制字符串,同时使用 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">>
我的问题背景: 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 使用 "2e4bcf85f39279ab9d1e1336a00dce0e"
盐作为二进制字符串,同时使用 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">>