在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安全。