我在制作Android应用时使用scrypt,计算哈希需要很长时间。这就是我所说的:
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上计算哈希值差不多需要一分钟,这当然非常慢。有没有人知道如何更快地做到这一点?我是新手,因此,为什么它如此缓慢以及如何加快它是无能为力的。
答案 0 :(得分:2)
我认为.first.first
参数应针对您的用例进行优化。
(N = 2 ^ 14,r = 8,p = 1)< 100毫秒(互动使用)
(N = 2 ^ 20,r = 8,p = 1)< 5s(敏感存储)
以及SCrypt.scrypt()
,N
,r
含义:
N:一般工作因素,迭代计数。
r:用于底层哈希的blocksize;微调相对内存成本。
p:并行化因子;微调相对cpu-cost
因此,如果您想要更少的时间,p
应该减少。 N
和r
与硬件有关,需要更多运行时环境才能动态调整。