我正在创建nodejs中的各种重新导演。我有几个值 userid // superid
这些我想散列以防止用户检索网址并伪造别人的网址以及base64编码以最小化所创建网址的长度。
http://myurl.com/~hashedtoken un-hashed hashtoken可能是这样的 55q322q23 55 =用户ID
我想过像这样使用加密库:
crypto.createHash('md5').update("55q322q23").digest("base64");
返回:u / mxNJQaSs2HYJ5wirEZOQ == 这里的问题是我有/不被认为是websafe所以我想从base64字母列表中删除不安全的字母,不知何故。有关此问题的任何想法,或者可能是解决手头问题的更好方法吗?
答案 0 :(得分:1)
您可以使用Base64的所谓 URL安全变体。 RFC 4648中描述的最常见变体分别使用-
和_
而不是+
和/
,并省略了填充字符(=
)。< / p>
Base64的大多数实现也支持这种URL安全变体,但如果你没有,那么手动操作就很容易了。
答案 1 :(得分:0)
这是我用过的东西。欢迎评论: - )
重要的一点是buffer.toString(&#39; base64&#39;),然后用一些replace()s对这个base64字符串进行URL保护。
function newId() {
// Get random string with 20 bytes secure randomness
var crypto = require('crypto');
var id = crypto.randomBytes(20).toString('base64');
// Make URL safe
return id.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
基于实施here。
为URL和本地电子邮件地址(在@之前)使字符串安全。