Have you tried openssl
’s implementation? That’s what we use (you can see it in discourse/lib/pbkdf2.rb
).
As an example, after setting a user’s password to swordfish#
:
discourse_development=# select password_hash, salt, password_algorithm from users where id=2;
-[ RECORD 1 ]------+-----------------------------------------------------------------
password_hash | 67650523776bdc87ebcd2fc11719553c87b11e6c4da49806d9d5232460d2adc9
salt | 712ef44dd6fe6d6f0f1b6f702bb78459
password_algorithm | $pbkdf2-sha256$i=600000,l=32$
$ openssl kdf \
-kdfopt pass:'swordfish#' \
-kdfopt salt:712ef44dd6fe6d6f0f1b6f702bb78459 \
-kdfopt digest:SHA2-256 \
-kdfopt iter:600000 \
-keylen 32 \
PBKDF2 \
| tr -d : | tr '[:upper:]' '[:lower:]'
67650523776bdc87ebcd2fc11719553c87b11e6c4da49806d9d5232460d2adc9