在nodejs中对散列字符串进行Websafe编码

时间:2013-07-14 13:05:32

标签: javascript node.js cryptography base64

我正在创建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字母列表中删除不安全的字母,不知何故。有关此问题的任何想法,或者可能是解决手头问题的更好方法吗?

2 个答案:

答案 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和本地电子邮件地址(在@之前)使字符串安全。