我需要在用户的浏览器中生成一个安全的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字符的字母数字字符串。我在这个主题上的知识是有限的,我在这里寻找一些帮助。
2条答案
按热度按时间lkaoscv71#
我是这样解决的:
不过这在一些老的浏览器中不起作用,因为我使用了window.btoa()。
krcsximq2#
1.生成39个随机字节的数组,每个字节为
0..255
。1.将数组表示为Base64字符串。长度为52个字符。Internet上提供了Javascript Base64编码器。
1.切掉字符串的最后两个字符(或前两个字符,或第一个和最后一个字符)。
如果要在浏览器中使用生成的随机字符串,则可能需要Base64的浏览器安全版本:改为
a-z A-Z 0-9 -_
:a-z A-Z 0-9 +/
的有关Base64的详细信息,请参见RFC 4648。