Java menyediakan set API kriptografi yang mantap dalam pakej java.security
dan subpackagesnya. API ini membolehkan pemaju melakukan pelbagai operasi kriptografi, termasuk penyulitan dan penyahsulitan. Kelas teras yang terlibat adalah Cipher
, SecretKey
, SecretKeyFactory
, dan KeyGenerator
. Berikut adalah pecahan cara menggunakannya untuk penyulitan simetri (menggunakan AES):
1. Generasi utama:
Pertama, anda perlu menjana kunci rahsia. Kunci ini penting untuk kedua -dua penyulitan dan penyahsulitan. Coretan kod berikut menunjukkan cara menjana kunci AES 256-bit:
<code class="java">import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; public class AESEncryption { public static void main(String[] args) throws NoSuchAlgorithmException { // Generate a 256-bit AES key KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256, new SecureRandom()); SecretKey secretKey = keyGenerator.generateKey(); // ... (rest of the code for encryption and decryption) ... } }</code>
2. Penyulitan:
Sebaik sahaja anda mempunyai kunci, anda boleh menggunakan kelas Cipher
untuk menyulitkan data anda. Kod berikut menunjukkan cara menyulitkan rentetan menggunakan AES dalam mod CBC dengan PKCS5Padding:
<code class="java">import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Base64; import java.util.Arrays; // ... (previous code for key generation) ... byte[] iv = new byte[16]; // Initialization Vector (IV) - must be randomly generated new SecureRandom().nextBytes(iv); IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec); byte[] encryptedBytes = cipher.doFinal("This is my secret message".getBytes()); String encryptedString = Base64.getEncoder().encodeToString(iv) Base64.getEncoder().encodeToString(encryptedBytes); //Combine IV and encrypted data for later decryption System.out.println("Encrypted: " encryptedString); } }</code>
3. Penyahsulitan:
Decryption adalah serupa dengan penyulitan, tetapi anda menggunakan Cipher.DECRYPT_MODE
. Ingatlah untuk menggunakan parameter kunci, IV, dan algoritma yang sama:
<code class="java">// ... (previous code for key generation and encryption) ... String[] parts = encryptedString.split("\\s "); // Split the string into IV and encrypted data byte[] decodedIv = Base64.getDecoder().decode(parts[0]); byte[] decodedEncryptedBytes = Base64.getDecoder().decode(parts[1]); IvParameterSpec ivParameterSpecDec = new IvParameterSpec(decodedIv); Cipher decipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); decipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpecDec); byte[] decryptedBytes = decipher.doFinal(decodedEncryptedBytes); System.out.println("Decrypted: " new String(decryptedBytes)); } }</code>
Ingatlah untuk mengendalikan pengecualian dengan sewajarnya dalam persekitaran pengeluaran. Contoh ini memberikan ilustrasi asas. Untuk senario yang lebih kompleks, pertimbangkan untuk menggunakan kunci utama dan amalan terbaik keselamatan lain.
Pengurusan utama yang selamat adalah yang paling penting dalam kriptografi. Kekunci yang dikompromi menjadikan penyulitan anda tidak berguna. Berikut adalah beberapa amalan terbaik:
SecureRandom
.Pilihan algoritma bergantung kepada keperluan dan kekangan keselamatan khusus anda. Inilah gambaran ringkas:
Penyulitan simetri (untuk kerahsiaan):
Penyulitan asimetrik (untuk kerahsiaan dan tandatangan digital):
Hashing (untuk integriti dan pengesahan):
Tandatangan Digital (untuk Pengesahan dan Bukan Penolakan):
Ingatlah untuk sentiasa menggunakan algoritma terkuat yang sistem anda dapat mengendalikan dan terus dikemaskini dengan nasihat keselamatan terkini.
Beberapa perangkap biasa dapat melemahkan keselamatan pelaksanaan penyulitan anda:
SecureRandom
.Dengan berhati -hati memandangkan perangkap -perangkap ini dan mengikuti amalan terbaik, anda dapat meningkatkan keselamatan pelaksanaan kriptografi Java anda dengan ketara. Ingat bahawa keselamatan adalah proses yang berterusan, dan terus dikemas kini dengan nasihat keselamatan terkini dan amalan terbaik adalah penting.
Atas ialah kandungan terperinci Bagaimana saya menggunakan API kriptografi Java untuk penyulitan dan penyahsulitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!