我正在尝试使用以下步骤安全地存储我的用户密码
我的代码粘贴在
下面public class EncrypterClass
{
private static final int iterations = 20000;
private static final int saltLen = 64;
private static final int desiredKeyLen = 512;
private static String hash(String value, byte[] salt) throws Exception
{
if (value == null || value.length() == 0)
throw new IllegalArgumentException("Empty passwords are not supported.");
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
SecretKey key = f.generateSecret(new PBEKeySpec(value.toCharArray(), salt, iterations, desiredKeyLen));
return Base64.encodeBase64String(key.getEncoded());
}
public static class Password
{
public static String getSaltedPassword( String password ) throws Exception
{
byte[] salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen);
return Base64.encodeBase64String(salt) + "$" + hash(password, salt);
}
public static boolean match(String password, String saltedPassword) throws Exception
{
String[] saltAndPass = saltedPassword.split("\\$");
if (saltAndPass.length != 2)
{
return false;
}
String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));
return hashOfInput.equals(saltAndPass[1]);
}
}
}
我在本地计算机上测试时工作正常。但是在我的AWS设置流程中进入某种耗时的处理(几分钟来散列密码)。目前,我的AWS设置是一个免费的测试设置,包含以下资源: EC2 t2.micro,1个vCPU和1GiB
有人可以指导可能出现的问题吗?
感谢 阿米特
答案 0 :(得分:1)
这种盐+哈希算法,特别是在如此多的迭代中,在设计上是缓慢的,并且是故意的:目标正是使攻击者通过进行暴力攻击来查找密码非常难以计算。在资源有限的VM上,它显然会更慢。