在java中生成具有特定位大小的随机字符串

Wil*_*iam 10 java

我怎么做?似乎无法找到办法.Securerandom似乎不允许我在任何地方指定位大小

the*_*ega 27

如果您的位数可以除以8,换句话说,您需要一个完整的字节数,您可以使用

Random random = ThreadLocalRandom.current();
byte[] r = new byte[256]; //Means 2048 bit
random.nextBytes(r);
String s = new String(r)
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢这些奇怪的字符,请将byte-array编码为base64:

例如,使用Apache Commons Codec并执行:

Random random = ThreadLocalRandom.current();
byte[] r = new byte[256]; //Means 2048 bit
random.nextBytes(r);
String s = Base64.encodeBase64String(r);
Run Code Online (Sandbox Code Playgroud)

  • @theomega:将随机字节转换为像这样的`String`不仅会产生难以理解的垃圾,还会丢失熵!(即你真的没有2048位的随机数据).例如,当您的平台默认编码为UTF-8时,大约许多字节将不是有效的"UTF-8"数据,而是被" "替换. (3认同)