在nodejs中散列string的Websafe编码

我在nodejs中创build了一个re-director。 我有一些像userid // superid这样的值

这些我想散列,以防止用户检索URL和伪造别人的url,也base64编码,以尽量减less创build的url的长度。

http://myurl.com/~hashedtoken其中未散列的hashtoken可能是这样的55q322q23 55 = userid

我想这样使用encryption库:

crypto.createHash('md5').update("55q322q23").digest("base64"); 

它返回:u / mxNJQaSs2HYJ5wirEZOQ ==这里的问题是,我有/哪些不被认为是websafe,所以我想从base64的字母列表中去除不安全的信件,不知何故。 任何关于这个问题的想法,或者更好的解决手头问题的方法?

您可以使用Base64的所谓的URL安全变体。 在RFC 4648中描述的最常见的变体使用-_分别代替+/ ,并省略填充字符( = )。

Base64的大多数实现也支持这个URL安全变体,尽pipe如果你的不支持的话,手动操作也很简单。

这是我用过的。 评论欢迎:-)

最重要的是buffer.toString('base64'),然后使用一对replace()来保护base64string。

 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(/=+$/, ''); } 

基于这里的实现。

为URL和本地电子邮件地址(在@之前)使string安全。