Node.js 如何避免bcrypt节点向URL字符串哈希添加斜杠?

Node.js 如何避免bcrypt节点向URL字符串哈希添加斜杠?,node.js,encryption,bcrypt,Node.js,Encryption,Bcrypt,我用它来生成一个散列,但有时它会在它生成的字符串中添加斜杠,如下面的一个,当我试图通过URL发送它时,这给我带来了困难 $12$G/KJOwTBLjGwcnAGaTlJMnAnkXa6/M1jt8FppD bcrypt中是否有一个设置可以生成不带斜杠的散列,或者我应该手动删除它们,或者用一些不太可能的模式(例如,slashslash)替换它们,以便在出现时能够恢复其出现 $12$GslashslashKJOwTBLjGwcnAGaTlJMnAnkXa6slashslashM1jt8FppD

我用它来生成一个散列,但有时它会在它生成的字符串中添加斜杠,如下面的一个,当我试图通过URL发送它时,这给我带来了困难

$12$G/KJOwTBLjGwcnAGaTlJMnAnkXa6/M1jt8FppD
bcrypt中是否有一个设置可以生成不带斜杠的散列,或者我应该手动删除它们,或者用一些不太可能的模式(例如,
slashslash
)替换它们,以便在出现时能够恢复其出现

$12$GslashslashKJOwTBLjGwcnAGaTlJMnAnkXa6slashslashM1jt8FppD
谢谢你让我知道你的想法

TLDR;你不能

bcrypt
遵循。将其更改为使用斜杠以外的内容将使哈希与其他实现不兼容。bcrypt哈希是base64编码的,其中包括/在其字符集中


或者,您可以对生成的哈希进行手动转换,或者使用base_64编码构建您自己的实现,用其他内容替换/。

您可以用另一个字符串替换/,例如“slash”

以下是收到哈希后处理哈希的方式:

 hash.replace(/\//g, "slash");
要进行比较,必须将“斜杠”转换回/


虽然@AdrianJohn提出了替换散列密码中斜杠字符的方法,但似乎是这样做的。然而,这不是一个有效的解决方案。因为,当您替换正斜杠时,当使用
bcrypt.compare
方法将密码与普通密码进行比较时,密码肯定会有所不同

方法如下:您必须重新运行
bcrypt.hash
方法,直到库为您提供URL安全密码(不带斜杠)

我一直在寻找解决办法。。。没有回答。看看我自己做的东西,它就像迪斯科舞厅

handlePasswordHashing = (plainPassword, salt) => {
    let hashed = bcrypt.hashSync(plainPassword, salt)

    if (hashed.includes("/")) {
       hashed = this.handlePasswordHashing(plainPassword, salt)
    }

    return hashed
}

注意:多次重新运行哈希不会改变算法。即使密码在散列后总是不同的,但它总是与普通密码相同。

这就是它应该做的,
algo/hash/salt
。你为什么要把它放在一个URL中?你应该用
encodeURI()
对它进行URL编码,但我也很想把这样的东西放在一个URL中。@JamesKPolk这没用。现在我决定用一个不太可能的模式手动替换所有出现的哈希,然后重新替换它。
handlePasswordHashing = (plainPassword, salt) => {
    let hashed = bcrypt.hashSync(plainPassword, salt)

    if (hashed.includes("/")) {
       hashed = this.handlePasswordHashing(plainPassword, salt)
    }

    return hashed
}