了解SecureRandom字符串生成器?

jyc*_*753 2 java security

我有点SecureRandom不清楚.以这里的代码为例:

import java.security.SecureRandom;
import java.math.BigInteger;

public final class SessionIdentifierGenerator{
private static SecureRandom random = new SecureRandom();

    public static void main(String[] args) {
           nextSessionId(); 
    }

  public static String nextSessionId(){
         BigInteger ss =  new BigInteger(130, random);
         System.out.println(ss);
         System.out.println(ss.toString(32));
         return null;
  }

}
Run Code Online (Sandbox Code Playgroud)

一个例子的出局将是:

1107894191825737787218556533052298445977

q1fikf1m0jagvlrmbtdah0mh4p

由于BigInteger是整数,输出是安静可预测的,但我不明白的是,自从我应用toString()方法以来,随机字符串来自哪里,所以我认为这个字符串它将是相同的数字序列但是作为字符串,所以这种讨厌的方式和原因是什么?

谢谢.ps:我不知道以前是否曾经问过,但我没有找到任何东西......原始代码维基

JB *_*zet 5

你正在调用toString(32)哪个,如其javadoc所示,

返回给定基数中此BigInteger的String表示形式.

所以你要问的是基数为32而不是传统基数10的数字的字符串表示.如果你传递了16,你将得到十六进制格式的数字,数字从.0f.如果你通过8,你会得到它作为八进制数,数字从0到7.