如何生成随机密码?

3
我需要生成一个随机密码,用于在OpenPGP.js中对某些内容进行对称加密。用户不应该接触或查看密码(所有操作都在后台完成)。因此,理想情况下,密码只是一些随机字节。不幸的是,据我所知,OpenPGP.js不支持这种方式。它仅支持字符串作为密码。
因此,我需要生成一个随机密码字符串。我希望它尽可能随机,并尽可能排除少数字符。
如何生成一个安全的随机密码字符串?
我目前有以下代码:
String.fromCharCode.apply(null, crypto.getRandomValues(new Uint8Array(32)));

然而,我有些担心当某些随机字节出现时,它可能会破坏UTF-16代理对,并且密码在其他浏览器上的Unicode实现不同的情况下可能被解释成不同的结果。

这个解决方案在所有浏览器中使用是否安全?

3个回答

1
我会轻松地使用类似以下的代码:

function generatePass() {
  var pass = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

  var passLength = (Math.random() * 15) + 5;
  
  for (var i = 0; i < passLength; i++)
    pass += possible.charAt(Math.floor(Math.random() * possible.length));

  return pass;
}

console.log(generatePass());

调整和变化代码也非常容易,在任何地方都可以运行。


谢谢,但不是我要找的东西 :) - undefined

1

回答我的问题:

我的系统的一部分是用来加密和解密密码(比如问题中的随机密码)。 当我使用OpenPGP.js测试我的解决方案时,解密操作返回的字符串(在加密后)有时与原始字符串不完全相等(大约十分之一的概率)。

这表明OpenPGP.js在其输入不正确时,无法正确地序列化或反序列化UTF-8(或者它所使用的编码)。我猜测我生成的字符串在Chrome中可能是无效的Unicode。

当然,如果我定义一个有限的已知字符集,它就能正常工作。

总结:

String.fromCharCode.apply(null, crypto.getRandomValues(new Uint8Array(32)));

不安全使用。


1
请看这里 Fiddle">Fiddle
function CreateRandomPassword(Length, isUpperAlpha, isLowerAlpha, isNumaric ,SpecialChars)
{
  var _allowedChars = "";
  if (isUpperAlpha != false)
    _allowedChars += "ABCDEFGHJKLMNOPQRSTUVWXYZ";
  if (isLowerAlpha != false)
    _allowedChars += "abcdefghijkmnopqrstuvwxyz";
  if (isNumaric != false)
    _allowedChars += "0123456789";
  _allowedChars += SpecialChars;
  if(!Length)
    Length = 8
  var chars = "";
  allowedCharCount = _allowedChars.length;
  if(allowedCharCount == 0)
    return " ";
  for (var i = 0; i < Length; i++)
  {
    chars += _allowedChars[Math.floor(Math.random() * Math.floor(allowedCharCount))];
  }
  return chars;
}

我已经开发了一个简单的函数来生成密码。

1
жӮЁеә”иҜҘеңЁиҝҷйҮҢжҸҗдҫӣжӮЁзҡ„CreateRandomPassword()еҮҪж•°зҡ„д»Јз ҒпјҢиҖҢдёҚжҳҜй“ҫжҺҘеҲ°еӨ–йғЁзҪ‘з«ҷгҖӮй“ҫжҺҘеҸҜиғҪдјҡеңЁжҹҗдёҖеӨ©еӨұж•ҲпјҢдҪҝеҫ—жӮЁзҡ„еӣһзӯ”еҸҳеҫ—ж— з”ЁгҖӮ - undefined
这是您需要的内容。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接