我使用brypt-nodejs来生成散列,但有时它会在生成的字符串中添加斜线,如下面所示,这给我在尝试通过URL发送它时带来了困难。
$12$G/KJOwTBLjGwcnAGaTlJMnAnkXa6/M1jt8FppD
bcrypt中是否有一个设置可以生成不带斜杠的散列,或者我应该手动删除它们,或者用一些不太可能的模式(例如slashslash
)替换,以便能够恢复它的出现,如果它出现的话?
$12$GslashslashKJOwTBLjGwcnAGaTlJMnAnkXa6slashslashM1jt8FppD
谢谢你让我知道你的想法!
4条答案
按热度按时间qv7cva1a1#
您可以将/替换为另一个字符串,例如“slash”
下面是您在收到哈希值后的处理方式:
要进行比较,必须将“斜杠”转换回/
vs3odd8k2#
TLDR;你不能。
bcrypt
跟在modular crypt format后面。将其更改为使用斜杠以外的内容将使哈希与其他实现不兼容。bcrypt哈希是base64编码,* 在其字符集 * 中包含/。或者,您可以对生成的散列进行手动转换,或者使用base_64编码构建自己的实现,用其他内容替换/。
myss37ts3#
虽然@AdrianJohn建议替换散列密码中的斜杠字符,但似乎是可行的方法。然而,这不是一个有效的解决方案。因为,当您替换正斜杠时,与使用
bcrypt.compare
方法的普通密码相比,密码肯定会有所不同。以下是具体做法:您必须重新运行
bcrypt.hash
方法,直到库为您提供URL安全密码(不带斜杠)。我一直在寻找解决方案......没有答案。看看我自己做了什么,它就像迪斯科一样!
注:多次重新运行哈希不会改变算法。即使哈希后的密码总是不同的,但它总是与普通密码相同。
disbfnqx4#
将
/
和+
符号替换为&
或任何其他未使用的url安全符号