【问题标题】:Websafe encoding of hashed string in nodejsnodejs中散列字符串的Web安全编码
【发布时间】:2013-07-14 13:05:32
【问题描述】:

我正在 nodejs 中创建各种重定向器。我有一些价值观,比如 userid // 超级用户名

我想对这些进行哈希处理以防止用户检索 url 并伪造别人的 url,并且还进行 base64 编码以最小化创建的 url 的长度。

http://myurl.com/~hashedtoken 未散列的哈希令牌可能是这样的 55q322q23 55 = 用户名

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

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

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

【问题讨论】:

    标签: javascript node.js cryptography base64


    【解决方案1】:

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

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

    【讨论】:

    • 我最终使用 urlsafe-base6 npm 库来满足您的描述。我编码为base64(不安全),然后使用库编码为安全。
    【解决方案2】:

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

    重要的一点是 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(/=+$/, '');
    }
    

    基于实现here

    使字符串对 URL 和本地电子邮件地址(@ 之前)安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2010-11-16
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多