【问题标题】:Buffer toString include all letters of alphabet缓冲区 toString 包括所有字母
【发布时间】:2018-11-18 02:53:44
【问题描述】:

我正在使用 Node.js 创建安全的随机令牌。举个例子:

crypto.randomBytes(32).toString("hex");
// dd89d6ab1a7196e8797c2da0da0208a5d171465a9d8e918d3b138f08af3e1852

这很好,但它比需要的时间长得多。我想包括所有字母,而不仅仅是a-f。如果它还包括大写字母,那就更好了。请记住,它必须是安全的,所以它不能使用Math.random

【问题讨论】:

    标签: javascript node.js security random cryptography


    【解决方案1】:

    使用这个:

    crypto.randomBytes(32).toString('base64');
    

    【讨论】:

    • 赞成,但 base64 字符串包含非字母数字字符
    • 它生成字母数字值,例如:Pvvyt1lSqiPUPH5oUfMQYyHaDCUp0uIwbbpPJ4uesZo=
    • 它还可以生成像dxNdBHzLGm4DUMMFkTh81R+ihzab5Jw+QYH7PBekjRg=这样的值,其中包含非字母数字值+=
    • 你可以替换它们。
    • 没错,所以我要放弃投票了。但我认为可能会有更好的答案。
    【解决方案2】:

    生成一个大小合适的随机数。将其转换为基数 36(对于 0..9,a..z)或基数 62(对于 0..9,a..z,A..Z)。

    【讨论】:

    • 如何安全地生成随机数?
    • 在 Java 中使用 java.security.SecureRandom()。许多其他语言的库中的某个地方也会有类似的方法。
    • 在 JavaScript 中似乎没有完全等价的,但它可以以非理想方式完成。
    • 我对 JavaScript 的了解恐怕还不够多。一种可能性是直接访问 Windows 安全 RNG 函数:CryptAPI CryptGenRandom。我认为苹果系统有一个等价物。或者寻找 Yarrow 或 Fortuna 加密 RNG 的 JavaScript 实现。
    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多