web-dev-qa-db-ja.com

Javaで長さnのSecureRandom文字列を生成する方法は?

私は次を使用してランダムな文字列を生成しています:

private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[512];
    random.nextBytes(bytes);
    return bytes.toString();
}

これにより、[B@70ffc557などの長さ11の文字列が得られます。上記のメソッドで指定された長さの文字列を返すようにするにはどうすればよいですか。例えば20文字?

15
kovac

ここで参照されている「重複した」質問が質問に答えないのに、なぜこれが重複としてマークされているのか理解できません。いずれにせよ、私が探していた答えは以下のとおりです。

private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[20];
    random.nextBytes(bytes);
    Encoder encoder = Base64.getUrlEncoder().withoutPadding();
    String token = encoder.encodeToString(bytes);
    return token;
}
22
kovac

bytes.toString();が間違っている場合は、Arrays.toString(bytes)を使用してみてください。ストリングに変換する場合は、新しいString(bytes)を使用してください。

0
Dorian Gray