收藏
回答

在小程序里有什么办法能生成密码学上安全的伪随机数么?

最近在看在小程序里进行AES加解密方面的内容,目前我没看到小程序提供原生的密码学相关组件。然后用Crypto-JS之类的第三方库,虽然加密算法本身是纯JS的所以可以使用,但是由于没有native的伪随机数生成器,所以不能生成安全的伪随机数。目前看到有一种方案是,后端提供一个伪随机数生成的接口,但是这好像有点奇怪。小程序里搞密码学相关的事情大家是用什么方案的呢?

回答关注问题邀请回答
收藏

1 个回答

  • 北望沣渭
    北望沣渭
    2020-07-26
    /**
     * Generate a random string aka `nonce`, similar as `crypto.randomBytes`.
     *
     * @param {number} size - Nonce string length, default is 32 bytes.
     *
     * @returns {string} 62 radix random string.
     */
    function nonce(size = 32) {
        const chars = `0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`
    
        return `0`.repeat(size).replace(/0/g, () => chars[Math.random()*62|0])
    }
    
    2020-07-26
    有用
    回复 5
    • admin
      admin
      发表于小程序端
      2020-07-26
      收藏
      2020-07-26
      回复
    • l6
      l6
      2020-07-26
      经过我之前几天的调研,Math.random() 应该不能用在密码学的场景.
      2020-07-26
      回复
    • 北望沣渭
      北望沣渭
      2020-07-26回复l6
      是的,Math.Random不能直接用,然而计算62遍后取可见字符串偏移量是可以的。
      2020-07-26
      回复
    • l6
      l6
      2020-07-26回复北望沣渭
      我是这么想的啊,你这个算法的根基还是Math.Random(),没有其他随机性。但是Math.Random本身的随机性又是不可靠的。不过我并不太懂密码学。并不确定。
      2020-07-26
      回复
    • 北望沣渭
      北望沣渭
      2020-07-26回复l6
      每天算上个百八十遍,有生之年能看的重复的数就很不错了,放心用吧
      2020-07-26
      回复
登录 后发表内容
问题标签