Cara Mencincang Kata Laluan dengan Selamat untuk Storan
Menyimpan kata laluan dalam plaintext menimbulkan risiko keselamatan yang ketara. Untuk melindungi data sensitif, adalah penting untuk mencincang kata laluan sebelum menyimpannya. Proses ini melibatkan penukaran kata laluan teks biasa kepada format bersaiz tetap yang disulitkan yang tidak boleh diterbalikkan dan secara pengiraan mahal untuk dipecahkan. Java menyediakan kemudahan yang teguh untuk pencincangan kata laluan, memastikan keselamatan bukti kelayakan pengguna.
Menggunakan PBKDF2 untuk Pencincangan Kata Laluan Selamat
Perpustakaan SunJCE di Java 6 memperkenalkan PBKDF2 (Kata Laluan- Fungsi Terbitan Utama Berdasarkan 2), algoritma standard industri untuk pencincangan kata laluan. Ia direka bentuk untuk mengelakkan serangan kekerasan dan serangan jadual pelangi dengan menggabungkan garam rawak dan kos pengiraan yang tinggi.
Melaksanakan Pencincangan Kata Laluan menggunakan PBKDF2
Mengesahkan Kata Laluan semasa Log masuk
Apabila pengguna log masuk:
Contoh Kod untuk Pencirian Kata Laluan
import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; import java.util.Arrays; import java.util.Base64; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; public class PasswordAuthentication { public String hash(char[] password) { byte[] salt = new byte[SIZE / 8]; random.nextBytes(salt); byte[] dk = pbkdf2(password, salt, 1 << cost); byte[] hash = new byte[salt.length + dk.length]; System.arraycopy(salt, 0, hash, 0, salt.length); System.arraycopy(dk, 0, hash, salt.length, dk.length); return ID + cost + '$' + enc.encodeToString(hash); } public boolean authenticate(char[] password, String token) { Matcher m = layout.matcher(token); if (!m.matches()) throw new IllegalArgumentException("Invalid token format"); int iterations = iterations(Integer.parseInt(m.group(1))); byte[] hash = Base64.getUrlDecoder().decode(m.group(2)); byte[] salt = Arrays.copyOfRange(hash, 0, SIZE / 8); byte[] check = pbkdf2(password, salt, iterations); int zero = 0; for (int idx = 0; idx < check.length; ++idx) zero |= hash[salt.length + idx] ^ check[idx]; return zero == 0; } private byte[] pbkdf2(char[] password, byte[] salt, int iterations) { KeySpec spec = new PBEKeySpec(password, salt, iterations, SIZE); try { SecretKeyFactory f = SecretKeyFactory.getInstance(ALGORITHM); return f.generateSecret(spec).getEncoded(); } catch (NoSuchAlgorithmException ex) { throw new IllegalStateException("Missing algorithm: " + ALGORITHM, ex); } catch (InvalidKeySpecException ex) { throw new IllegalStateException("Invalid SecretKeyFactory", ex); } } }
Kesimpulan
Mencincang kata laluan menggunakan PBKDF2 ialah langkah keselamatan yang penting untuk melindungi data pengguna. Dengan melaksanakan pencincangan kata laluan yang mantap, pembangun boleh meningkatkan keselamatan aplikasi mereka dengan ketara dan meminimumkan risiko pelanggaran data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencincang Kata Laluan dengan Selamat di Java Menggunakan PBKDF2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!