Scrpyt
如前所述,Scrypt密码哈希的安全性要高于Bcrypt,Scrypt内部还使用了PBKDF2算法,具体算法就不深入研究了,其实从Scrypt的入参就可以看出其安全性,具体入参列表如下:
- Passphrase:待哈希密码
- Salt:盐,推荐不小于16字节
- N:CPU/内存消耗指数,一般取值为2的若干次方,例如16384
- p:并行计算参数,理论上取值范围为1-255,参数值越大越依赖于并发计算
- r:表块大小,理论取值范围为1-255,同样越大越依赖内存与带宽
- dkLen: 表最终生成的结果长度。
以JAVA代码为例,使用如下Scrypt库
<dependency>
<groupId>com.lambdaworks</groupId>
<artifactId>scrypt</artifactId>
<version>1.4.0</version>
</dependency>
示例代码如下:
String pwd = "123456";
byte[] salt = new byte[16];
SecureRandom.getInstance("SHA1PRNG").nextBytes(salt);
long time = new Date().getTime();
System.out.println(toHexString(SCrypt.scrypt(pwd.g