


Bagaimana saya menggunakan API kriptografi Java untuk penyulitan dan penyahsulitan?
Mar 13, 2025 pm 12:25 PMBagaimana cara menggunakan API kriptografi Java untuk penyulitan dan penyahsulitan?
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.
Apakah amalan terbaik untuk pengurusan utama yang selamat apabila menggunakan kriptografi Java?
Pengurusan utama yang selamat adalah yang paling penting dalam kriptografi. Kekunci yang dikompromi menjadikan penyulitan anda tidak berguna. Berikut adalah beberapa amalan terbaik:
- Gunakan Generasi Kunci Kuat: Menggunakan algoritma seperti AE dengan panjang kunci yang mencukupi (sekurang -kurangnya 256 bit). Gunakan penjana nombor rawak kriptografi yang selamat (CSPRNG) seperti
SecureRandom
. - Penyimpanan Utama: Jangan Kunci Hardcode terus ke dalam aplikasi anda. Gunakan kedai kunci yang selamat yang disediakan oleh Senibina Kriptografi Java (JCA) atau Modul Keselamatan Perkakasan Berdedikasi (HSM). Keystores menyediakan mekanisme untuk perlindungan kata laluan dan pengurusan utama.
- Putaran utama: Secara kerap memutar kunci anda untuk mengehadkan kesan kompromi yang berpotensi. Melaksanakan proses putaran utama yang dijadualkan.
- Kawalan Akses: Mengatasi akses kepada kunci berdasarkan prinsip keistimewaan paling sedikit. Hanya kakitangan atau sistem yang diberi kuasa harus mempunyai akses kepada kunci.
- Kemusnahan utama: Apabila kunci tidak lagi diperlukan, hancurkannya dengan selamat. Mengatasi data utama beberapa kali adalah pendekatan yang sama, tetapi HSMS menawarkan mekanisme pemusnahan utama yang lebih mantap.
- Elakkan penggunaan semula utama: Jangan gunakan semula kunci yang sama untuk pelbagai tujuan atau merentasi aplikasi yang berbeza.
- Gunakan Sistem Pengurusan Utama (KMS): Untuk aplikasi peringkat perusahaan, pertimbangkan untuk menggunakan KM yang berdedikasi yang menawarkan ciri-ciri canggih seperti pengurusan kitaran hayat utama, pengauditan, dan integrasi dengan sistem keselamatan lain.
Algoritma kriptografi Java mana yang paling sesuai untuk keperluan keselamatan yang berbeza?
Pilihan algoritma bergantung kepada keperluan dan kekangan keselamatan khusus anda. Inilah gambaran ringkas:
-
Penyulitan simetri (untuk kerahsiaan):
- AES (Standard Penyulitan Lanjutan): Dianggap secara meluas algoritma simetri yang paling selamat dan cekap untuk kebanyakan aplikasi. Gunakan kekunci 256-bit untuk keselamatan maksimum.
- Chacha20: Cipher aliran moden yang menawarkan keselamatan dan prestasi yang kukuh, terutamanya pada sistem dengan sumber yang terhad.
-
Penyulitan asimetrik (untuk kerahsiaan dan tandatangan digital):
- RSA: Algoritma yang digunakan secara meluas untuk tandatangan digital dan pertukaran utama. Walau bagaimanapun, ia lebih mahal daripada algoritma simetri. Gunakan saiz utama sekurang -kurangnya 2048 bit.
- ECC (Cryptography Curve Elliptic): Menyediakan keselamatan yang setanding dengan RSA dengan saiz utama yang lebih kecil, menjadikannya lebih efisien untuk persekitaran yang terkawal sumber.
-
Hashing (untuk integriti dan pengesahan):
- SHA-256/SHA-512: Algoritma hash selamat menyediakan rintangan perlanggaran. SHA-512 menawarkan keselamatan yang sedikit lebih tinggi tetapi secara komputasi lebih mahal.
- HMAC (kod pengesahan mesej berasaskan hash): Menyediakan pengesahan mesej dan integriti. Gabungkan dengan fungsi hash yang kuat seperti SHA-256 atau SHA-512.
-
Tandatangan Digital (untuk Pengesahan dan Bukan Penolakan):
- RSA dan ECDSA (algoritma tandatangan digital lengkung elips): Kedua -duanya digunakan secara meluas untuk membuat tandatangan digital. ECDSA pada umumnya lebih cekap daripada RSA.
Ingatlah untuk sentiasa menggunakan algoritma terkuat yang sistem anda dapat mengendalikan dan terus dikemaskini dengan nasihat keselamatan terkini.
Adakah terdapat perangkap biasa untuk mengelakkan apabila melaksanakan penyulitan dan penyahsulitan di Java?
Beberapa perangkap biasa dapat melemahkan keselamatan pelaksanaan penyulitan anda:
- Pengendalian IV yang tidak betul: Menggunakan IV bukan rawak atau digunakan semula dengan ciphers blok seperti AES dalam mod CBC dengan ketara mengurangkan keselamatan. Sentiasa menjana IV secara rawak kriptografi untuk setiap operasi penyulitan.
- Kekunci lemah atau keras: Jangan sekali -kali kekunci kod hardcode secara langsung dalam kod anda. Gunakan kedai kunci yang selamat dan ikuti amalan terbaik pengurusan utama.
- Padding yang tidak betul: Menggunakan skim padding yang salah atau tidak selamat boleh menyebabkan kelemahan seperti serangan Oracle padding. Gunakan skim padding yang mantap seperti PKCS5Padding atau PKCS7Padding.
- Penyalahgunaan Algoritma: Memilih algoritma yang tidak sesuai atau menggunakannya secara tidak betul boleh menjejaskan keselamatan. Berhati -hati mempertimbangkan keperluan keselamatan aplikasi anda dan pilih algoritma dan mod operasi yang sesuai.
- Panjang kunci yang tidak mencukupi: Menggunakan panjang kunci yang terlalu pendek menjadikan penyulitan anda terdedah kepada serangan kekerasan. Sentiasa gunakan panjang kunci yang disyorkan untuk algoritma yang dipilih.
- Mengabaikan Pengendalian Pengecualian: Pengendalian pengendalian yang betul adalah penting untuk kriptografi yang selamat dan mantap. Kegagalan mengendalikan pengecualian boleh menyebabkan kelemahan atau kehilangan data.
- Sanitisasi data yang tidak betul: Gagal membersihkan data sebelum penyulitan boleh menyebabkan serangan suntikan. Membersihkan data dengan sewajarnya sebelum menyulitkan.
- Generasi nombor rawak yang tidak selamat: Menggunakan penjana nombor rawak yang lemah dapat melemahkan keselamatan kunci dan IV anda. Sentiasa gunakan CSPRNG seperti
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

Kaedah terbina dalam JavaScript seperti .map (), .filter () dan .reduce () dapat memudahkan pemprosesan data; 1) .map () digunakan untuk menukar elemen satu hingga satu untuk menghasilkan tatasusunan baru; 2) .filter () digunakan untuk menapis elemen mengikut keadaan; 3) .reduce () digunakan untuk mengagregatkan data sebagai nilai tunggal; Penyalahgunaan harus dielakkan apabila digunakan, mengakibatkan kesan sampingan atau masalah prestasi.

Gelung acara JavaScript menguruskan operasi tak segerak dengan menyelaraskan susunan panggilan, webapis, dan barisan tugas. 1. Stack panggilan melaksanakan kod segerak, dan ketika menghadapi tugas -tugas yang tidak segerak, ia diserahkan kepada Webapi untuk diproses; 2. Selepas Webapi melengkapkan tugas di latar belakang, ia meletakkan panggil balik ke dalam barisan yang sama (tugas makro atau tugas mikro); 3. Loop acara memeriksa sama ada timbunan panggilan kosong. Jika ia kosong, panggilan balik diambil dari barisan dan ditolak ke dalam tumpukan panggilan untuk pelaksanaan; 4. Tugas -tugas mikro (seperti janji. 5. Memahami gelung acara membantu mengelakkan menyekat benang utama dan mengoptimumkan pesanan pelaksanaan kod.

Gelembung peristiwa menyebarkan dari elemen sasaran ke luar ke nod nenek moyang, sementara penangkapan peristiwa menyebarkan dari lapisan luar ke dalam ke elemen sasaran. 1. Bubbles Acara: Selepas mengklik elemen kanak -kanak, acara itu mencetuskan pendengar elemen induk ke atas. Sebagai contoh, selepas mengklik butang, ia mengeluarkan anak -anak terlebih dahulu, dan kemudian ParentClicked. 2. Tangkap Acara: Tetapkan parameter ketiga menjadi benar, supaya pendengar dilaksanakan di peringkat penangkapan, seperti mencetuskan pendengar penangkapan elemen induk sebelum mengklik butang. 3. Penggunaan praktikal termasuk pengurusan bersatu peristiwa elemen kanak -kanak, pemprosesan pemintasan dan pengoptimuman prestasi. 4. Aliran acara DOM dibahagikan kepada tiga peringkat: menangkap, sasaran dan gelembung, dan pendengar lalai dilaksanakan di peringkat gelembung.
