4

我正在使用scrypt制作 Android 应用程序,计算哈希需要很长时间。这就是我所说的:

String hash = Base64.encodeToString(SCrypt.scrypt("password".getBytes(), "salt".toString().getBytes(), 16384, 16, 2, 128), Base64.DEFAULT);

这就是我在 Gradle 中声明依赖项的方式:

compile group: 'com.lambdaworks', name: 'scrypt', version: '1.4.0'

在我的 Nexus 6P 上计算哈希值几乎需要一分钟,这当然非常慢。有谁知道如何更快地做到这一点?我对此并不陌生,因此对它为什么这么慢以及如何加快速度一无所知。

4

1 回答 1

2

我认为SCrypt.scrypt()参数应该针对您的用例进行优化。

这个答案和这张幻灯片中的一些数字p17

(N = 2^14, r = 8, p = 1) for < 100ms (交互式使用)

(N = 2^20, r = 8, p = 1) for < 5s (敏感存储)

N, r,p含义:

N:一般工作因子,迭代次数。

r:用于底层哈希的块大小;微调相对内存成本。

p:并行化因子;微调相对 CPU 成本

所以如果你想要更少的时间,N应该减少。r并且p与硬件有关,需要更多的运行环境来动态调整。

于 2016-07-08T04:21:37.297 回答