1

我正在 nodejs 中创建各种重定向器。我有一些值,例如 userid // superid

这些我想散列以防止用户检索 url 并伪造别人的 url 以及 base64 编码以最小化创建的 url 的长度。

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

我想过像这样使用加密库:

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

返回: u/mxNJQaSs2HYJ5wirEZOQ== 这里的问题是我有 / 不被认为是网络安全的,所以我想以某种方式从 base64 字母列表中删除不安全的字母。关于这个或手头问题的更好解决方案的任何想法?

4

2 回答 2

1

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

Base64 的大多数实现也支持这种 URL 安全变体,但如果您的不支持,手动操作也很容易。

于 2013-07-14T16:54:58.293 回答
0

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

重要的一点是 buffer.toString('base64'),然后用几个 replace() 对 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(/=+$/, '');
}

基于这里的实现。

为 URL 和本地电子邮件地址(在 @ 之前)提供安全的字符串。

于 2015-10-29T14:39:54.853 回答