您好,我写了一个简单的数据库程序,我需要有用户。我写了一个简单的程序来测试我的想法,它似乎有用,但我想知道我的想法是否正确。
我使用salt哈希密码:
Random random = new Random();
byte[] salt = new byte[16];
random.nextBytes(salt);
KeySpec spec = new PBEKeySpec("pass123".toCharArray(), salt, 65536, 128);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
byte[] hash = f.generateSecret(spec).getEncoded();
Base64.Encoder enc = Base64.getEncoder();
将它们存储为数据库中的字符串hash + salt:
String index = enc.encodeToString(salt) + "$"+ enc.encodeToString(hash);
当用户登录时从数据库中获取我的字符串并检查传递是否正确:
String stored[] = index.split("\\$");
KeySpec spec1 = new PBEKeySpec("haslo1234fdfgds".toCharArray(), stored[0].getBytes(), 65536, 128);
SecretKeyFactory f1 = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
byte[] hash1 = f.generateSecret(spec1).getEncoded();
if(stored[1].equals(enc.encodeToString(hash1))) return true;
我知道在Base64中是解码器,但我想知道当这个解决方案似乎有效时我是否必须使用它? 我是新手,所以我很遗忘一些事情,这就是为什么我想问我的想法是否合适。