migratetoflarum / old-passwords
即时重新散列旧平台上的密码
Requires
- ext-json: *
- flarum/core: ^1.0
Requires (Dev)
- hautelook/phpass: ^1.1
- phpunit/phpunit: ^9.5
Suggests
- hautelook/phpass: If you need to check against phpass hashes
README
此扩展允许用户继续使用先前平台(使用与Flarum不同的散列算法)的密码进行登录。
安装
composer require migratetoflarum/old-passwords
更新
composer update migratetoflarum/old-passwords php flarum migrate php flarum cache:clear
文档
此扩展旨在与迁移脚本一起使用。没有从UI可访问的设置(您仍然需要启用扩展才能使其工作!)
迁移会在您的 users
表中添加一个 migratetoflarum_old_password
列,该列可以包含使用与bcrypt不同的算法散列的旧凭据。
此列必须包含一个有效的JSON序列化对象,如以下所述,或者为 null
以不提供旧密码。
一旦通过旧密码正确识别了用户,密码将以bcrypt重新散列,存储在Flarum的 password
字段中,并将 migratetoflarum_old_password
列设置为 null
。
如果您在数据库中为某个用户同时拥有bcrypt散列的 password
和 migratetoflarum_old_password
值,则用户可以使用任一密码登录。使用的密码将覆盖 password
的值,并将 migratetoflarum_old_password
设置为 null
。
兼容的散列方法
不要犹豫,提出一个issue或PR以建议新的散列方法。很快会有更多添加。
虽然其中一些选项可能适合测试目的或其他恶作剧,但有些可能会在数据泄露的情况下使旧密码的用户面临风险。这些选项带有 /!\ 不安全 标签。就像整个扩展一样,请自行承担使用风险!
纯文本
/!\ 不安全:您可以直接使用bcrypt对明文密码进行盐化和散列,并将其存储在 password
中。
示例
{"type":"plain","password":"correcthorsebatterystaple"}
Bcrypt
在这里存储bcrypt散列而不是 password
列可能没有意义,但这是可能的。
示例(密码 = bcrypt(correcthorsebatterystaple)
)
{"type":"bcrypt","password":"$2y$10$pUdywYeC2WZxZROQK0SPIu7x58OdO/aLxKnHRlfB8lni0aS6EEWdu"}
Phpass
读取由Phpass创建的可移植和bcrypt散列。
要使用此类型,您需要安装 hautelook/phpass
包
composer require hautelook/phpass:^1.1
示例(密码 = portablehash(correcthorsebatterystaple)
)
{"type":"phpass","password":"$P$Bdjwj4JGIZcMz02HOu69ULVYMPOMK5."}
MD5
/!\ 不安全:带有或不带有盐的MD5仍然很弱。请考虑使用下面的 md5-bcrypt
选项。
示例(密码 = md5(correcthorsebatterystaple)
)
{"type":"md5","password":"e9f5bd2bae1c70770ff8c6e6cf2d7b76"}
示例(密码 = md5(12345678correcthorsebatterystaple)
)
{"type":"md5","password":"eefda52fc6b3747b14b563cef9c95062","salt-before":"12345678"}
示例(密码 = md5(correcthorsebatterystaple12345678)
)
{"type":"md5","password":"72d4f016727f69dcfb736fee65b079c8","salt-after":"12345678"}
MD5-Bcrypt
这是导入MD5散列的首选方法。您必须对每个旧的MD5密码散列运行bcrypt,并将结果值存储在Flarum中。
示例(密码 = bcrypt(md5(correcthorsebatterystaple))
)
{"type":"md5-bcrypt","password":"$2y$10$WTM5g/fgvJULmERFBpuv1.zqupDwav0/orAot5gWTpZ0xSCkW6tkq"}
示例(密码 = bcrypt(md5(12345678correcthorsebatterystaple))
)
{"type":"md5-bcrypt","password":"$2y$10$WTM5g/fgvJULmERFBpuv1.zqupDwav0/orAot5gWTpZ0xSCkW6tkq","salt-before":"12345678"}
您可以使用与MD5相同的盐。
MD5-Double
/!\ 不安全:请考虑使用下面的 md5-double-bcrypt
选项。
与MD5相同,但在添加盐之前先对密码进行散列。
示例(密码 = md5(12345678 + md5(correcthorsebatterystaple))
)
{"type":"md5-double","password":"75ed2cf45b78dfaa65915d83b73cee9b","salt-before":"12345678"}
您可以使用与MD5相同的盐。
MD5-Double-Bcrypt
与MD5-Double相同,但添加了一个额外的bcrypt层。
示例(密码 = bcrypt(md5(12345678 + md5(correcthorsebatterystaple)))
)
{"type":"md5-double-bcrypt","password":"$2y$10$aws79gtmfZzV8/ikoJSCyuIVLDKlStBRvNDdJqAr1r6k4ZYjZmcC2","salt-before":"12345678"}
SHA1
/!\ 不安全:无论是否有盐,SHA1都保持较弱。请考虑使用以下 sha1-bcrypt
选项。
示例(密码 = sha1(correcthorsebatterystaple)
)
{"type":"sha1","password":"bfd3617727eab0e800e62a776c76381defbc4145"}
您可以使用与MD5相同的盐。
SHA1-Bcrypt
这是导入SHA1散列的首选方法。您必须运行每个旧的SHA1密码散列通过bcrypt,并将结果值存储在Flarum中。
示例(密码 = bcrypt(sha1(correcthorsebatterystaple))
)
{"type":"sha1-bcrypt","password":"$2y$10$b.K9J5Cc7FBJxtuy/hL/vuypT/2vn5jM42M6vpCFIKBfz9n.HAG2a"}
您可以使用与MD5相同的盐。
SHA1-Double
/!\ 不安全:请考虑使用以下 sha1-double-bcrypt
选项。
与sha1的md5-double
相同。
示例(密码 = sha1(12345678 + sha1(correcthorsebatterystaple))
)
{"type":"sha1-double","password":"7e7247394d9283ce8b0cf6f862eae667668f1489","salt-before":"12345678"}
SHA1-Double-Bcrypt
与sha1的md5-double-bcrypt
相同。
示例(密码 = bcrypt(sha1(12345678 + sha1(correcthorsebatterystaple)))
)
{"type":"sha1-double-bcrypt","password":"$2y$10$vtO9973AbQKq2vb9c0zH/OZxUNNagPxrZydMpQelU4L07BJG1Z8cm","salt-before":"12345678"}
KMD5
由Unclassified NewsBoard使用的基于MD5的散列。
示例(密码 = first16bytes(md5(correcthorsebatterystaple)) + 12 + last16bytes(md5(correcthorsebatterystaple))
)
{"type":"kmd5","password":"caecd5d8c1e3fd9212c2c1cb348fedaed1"}
A MigrateToFlarum 扩展
这是MigrateToFlarum(一个即将推出的在线论坛迁移工具)提供的一个免费扩展。关注我们的Twitter以获取更新 https://twitter.com/MigrateToFlarum
需要自定义Flarum扩展? 联系Clark Winkelmann!