我需要在用户浏览器中生成一个安全的50个字符的随机字符串。

看着sjcl.prng到目前为止,我已经做到了:

$(document).ready(function () {

    sjcl.random = new sjcl.prng(8);

    sjcl.random.startCollectors();

    $("body").on('mousemove', function() {
        console.log(sjcl.random.getProgress(8));

        if(sjcl.random.isReady(8) === 2) {
            sjcl.random.stopCollectors();
            console.log(sjcl.random.randomWords(5,8));
        }
    });

});

将鼠标移动一会儿后,我得到了一个字节数组,如下所示:[-579285364, 1099191484, 94979086, -1572161987, -570940948]

但是我正在寻找的是一个50个字符的字母数字字符串。我对该主题的知识有限,因此我在这里寻求帮助。

最佳答案

这是我解决的方法:

function createRandomString (callback, length) {
  var randomBase64String = '',
  checkReadyness;

  checkReadyness = setInterval(function () {
    console.log(length);
    if(sjcl.random.isReady(10)) {
      while(randomBase64String.length < length) {
        randomInt = sjcl.random.randomWords(1, 10)[0];
        randomBase64String += btoa(randomInt);
      }
      randomBase64String = randomBase64String.substr(0, length);
      callback(randomBase64String);
      clearInterval(checkReadyness);
    }
  }, 1);
}

This doesn't work in older browsers though. Because I used window.btoa().

10-07 21:03