Java和密码强随机数

pho*_*594 1 java encryption android salt

我一直在使用Java的SecureRandom类来生成盐,以便以后加密和密码哈希(我为每个任务生成单独的盐).我一直在使用的代码如下:

//Init random number generator
secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(System.nanoTime());

//Create salts
secureRandom.nextBytes(bytAuthSalt);
secureRandom.nextBytes(bytEncryptionSalt);
Run Code Online (Sandbox Code Playgroud)

现在,一切都很顺利,直到我开始真正验证我得到的值.对于应用程序的几个连续执行,我的盐是:

[B@43d55dd8
[B@43d55b58
[B@43d55b50
[B@43bd0cc8
[B@43db0b08
[B@43bd0f50
Run Code Online (Sandbox Code Playgroud)

令我感到不安的是,这些数字似乎都是大致顺序的.在网上进行了一些搜索之后,我再次重复运行,而没有自己播种到相同的结果.

我唯一猜测可能导致这种情况的原因在于我正在为Android平台开发.我知道他们有自己的加密提供商,但我没有任何例外.有任何想法吗?

提前致谢.

Bil*_*ard 9

看起来你打印出对字节数组的引用而不是它的内容.这就是为什么它们是顺序的,引用基本上是给你JVM内存中的位置.在打印之前将字节数组转换为String.

String saltContents = Arrays.toString(bytAuthSalt);
Run Code Online (Sandbox Code Playgroud)

使用Arrays将数组转换为String 将显示字节的原始值.

  • 如果我没有弄错,那就是使用默认字符集来解释字节,而不是打印出原始字节.OP是否需要原始字节而不是ASCII等效字符? (3认同)
  • @rogach我同意,但很多这些值将显示为ctrl-chars或whitespace,因此你将无法评估所有字节. (2认同)