5

ユーザーのブラウザーで安全な 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 文字の英数字の文字列です。このトピックに関する私の知識は限られているため、ここで助けを求めています。

4

2 に答える 2

5

これが私がそれを解決した方法です:

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);
}

ただし、これは古いブラウザでは機能しません。window.btoa() を使ったからです。

于 2014-12-23T00:04:51.627 に答える
1
  1. ランダムな 39 バイトの配列を生成します0..255

  2. 配列を Base64 文字列として表現します。これは 52 文字の長さになります。インターネット上で Javascript Base64 エンコーダーを利用できるようになります。

  3. 文字列の最後の 2 文字 (または最初の 2 文字、または最初と最後の文字) を切り捨てます。

結果のランダムな文字列をブラウザで使用したい場合は、a-z A-Z 0-9 -_代わりに Base64 のブラウザ セーフ バージョンが必要になる場合があります。a-z A-Z 0-9 +/

Base64 の詳細については、RFC 4648を参照してください。

于 2014-06-14T13:05:04.490 に答える