Artikel ini terutama memperkenalkan algoritma enkripsi yang umum digunakan untuk implementasi Java - algoritma enkripsi satu arah MD5 dan SHA, sebagai berikut:
1. Arsitektur Keamanan Java
1.1 Pengantar Arsitektur Keamanan Java
Menyediakan kelas dan antarmuka untuk kerangka kerja keamanan di Java. JDK Security API adalah API inti dari bahasa pemrograman Java, yang terletak di paket java.security (dan subpupagenya), serta paket Sun.securityapi (dan subpupagenya). Dirancang untuk membantu pengembang menggunakan fitur keamanan tingkat rendah dan canggih dalam program mereka.
Rilis pertama JDK di JDK 1.1 memperkenalkan "Java Encryption Architecture" (JCA), yang mengacu pada arsitektur yang digunakan untuk mengakses dan mengembangkan fungsi kata sandi platform Java. Dalam JDK 1.1, JCA menyertakan API untuk tanda tangan digital dan pencernaan pesan. JDK 1.2 sangat memperluas arsitektur enkripsi Java, ini juga meningkatkan infrastruktur manajemen sertifikat untuk mendukung sertifikat X.509 V3, dan memperkenalkan arsitektur keamanan Java baru untuk kontrol akses berbutir halus, dapat dikonfigurasi, fleksibel, dan diperluas.
Arsitektur enkripsi Java mencakup bagian-bagian terkait kata sandi dari API keamanan JDK 1.2, serta serangkaian konvensi dan spesifikasi yang disediakan dalam dokumen ini. Untuk menerapkan beberapa kata sandi yang dapat dioperasikan, ini juga menyediakan arsitektur "penyedia".
Java Password Extension (JCE)) memperluas API JCA, termasuk API untuk enkripsi, pertukaran kunci, dan kode otentikasi informasi (MAC). Kata sandi JCE dan JDK bersama -sama memberikan API kata sandi lengkap yang tidak terkait dengan platform. JCE sebagai perpanjangan JDK akan dirilis secara mandiri untuk mematuhi kendala kontrol ekspor AS.
1.2 Kode sumber terkait JDK di Eclipse
Untuk memiliki pemahaman yang lebih dalam tentang implementasi algoritma enkripsi satu arah MD5 dan SHA di Java, kode sumber JDK dapat dikaitkan dengan menggunakan IDE ECLIPSE (penulis menggunakan JDK6.0).
Setelah pemasangan JDK6.0 selesai, ada direktori SRC.ZIP di direktori root JDK (mis. C: /java/jdk1.6.0_21). Direktori ini dapat didekompresi ke direktori lain (mis. D:/amigo/studi/esai teknis/201405). SRC.ZIP tidak berisi semua kode sumber JDK. Misalnya, subpackage di bawah Sun tidak ada di SRC.ZIP (mis. Paket Sun.security dan subpackage -nya yang digunakan dalam artikel ini tidak termasuk).
Untuk mengunduh subpackage ini, Anda perlu mengunduh kode sumber OpenJDK. OpenJDK adalah versi open source dari JDK dan dirilis dalam bentuk protokol GPL. Di JDK7, OpenJDK telah menjadi pengembangan tulang punggung JDK7. Sun JDK7 dirilis berdasarkan OpenJDK7. Sebagian besar kode aslinya sama, dan hanya sebagian kecil dari kode asli yang diganti. Diterbitkan menggunakan JRL (Lisensi Javaresearch, Perjanjian Lisensi Penelitian Java).
OpenJDK Download Address: //www.vevb.com/softs/75724.html
Setelah mengunduh, salin semua file dan folder di OpenJDK-6-SRC-B27-26_OCT_2012/JDK/SRC/SRC/CLASS CLASS Directory ke direktori SRC yang unzip.
Selanjutnya, konfigurasikan kode sumber terkait di Eclipse: klik "Windows"-> "Preferensi", dan pilih "Java"-> "JRES yang diinstal" di menu kiri. Jika JRE mesin ini telah dikonfigurasi, Anda tidak perlu mengonfigurasinya. Jika tidak dikonfigurasi, klik tombol "Tambahkan" di sebelah kanan dan pilih jalur JDK6.0 yang diinstal di jendela pop-up "Tambah JRE" (mis. C: /java/jdk1.6.0_21). Klik tombol "OK" untuk menyelesaikan pengaturan JRE.
Pilih Set JRE, klik tombol "Edit ..." di sebelah kanan, pilih paket RT.Jar di jendela pop-up, klik tombol "Lampiran Sumber ...", klik tombol "Folder Eksternal ..." di jendela pop-up, dan arahkan jalur kode sumber ke jalur SRC sekarang saja (mis. D:/Amigo/Studi/Studi Essay/201405). Lihat gambar di bawah ini:
Setelah mengklik tombol "OK" untuk mengaturnya, saat menulis implementasi MD5 dan SHA, ketika memanggil metode yang relevan dari MessageDigest, Anda dapat menggunakan Mode Debug F5 debugging satu langkah untuk melihat kelas-kelas terutama yang terlibat dalam implementasi algoritma enkripsi satu arah MD5 dan SHA di Java.
1.3 Kelas utama enkripsi MD5 dan SHA di JDK
Dalam JDK6.0, diagram kelas beberapa kelas terkait erat dengan MD5 dan SHA adalah sebagai berikut:
Di antara mereka, "MessageDigestSpi" adalah kelas abstrak tingkat atas, dan "MessageDigest" dan "DigestBase" di bawah paket yang sama adalah kelas sub-abstrak.
Dalam diagram kelas di atas, pola desain delegasi digunakan. Prinsip dari pola ini adalah bahwa Kelas B (di sini adalah Kelas Dalam Delegage) dan Kelas A (di sini adalah kelas MessageDigestSpi) adalah dua kelas yang tidak memiliki hubungan satu sama lain. B memiliki metode dan atribut yang persis sama dengan A; Dan metode panggilan dan atribut dalam B adalah untuk memanggil metode dan atribut dengan nama yang sama di A. B tampaknya menjadi perantara yang disahkan oleh A. Kode pihak ketiga tidak perlu mengetahui keberadaan A dan subkelasnya, juga tidak perlu memiliki koneksi langsung dengan A dan subkelasnya. Melalui B, fungsi A dapat digunakan secara langsung, yang tidak hanya dapat menggunakan berbagai fungsi A, tetapi juga melindungi A dan subkelasnya dengan baik.
Kode yang relevan untuk MD5 dan SHA semuanya ada di kelas-kelas seperti MD5 dan SHA, tetapi kelas abstrak MessageDigest yang dihadapi pelanggan tidak perlu berurusan dengan berbagai kelas implementasi, cukup berurusan dengan mereka melalui kelas delegasi.
2. Enkripsi MD5
2.1 Ikhtisar
Pesan Digest Algoritma MD5 (Nama Cina adalah pesan pencernaan algoritma edisi kelima) adalah fungsi hash yang banyak digunakan di bidang keamanan komputer untuk memberikan perlindungan integritas pesan. Jumlah file dari algoritma ini adalah RFC 1321 (R.Rivest, MIT Laboratory for Computer Science dan RSA Data Security Inc. April 1992).
Nama lengkap MD5 adalah Algoritma Pesan-Dergest 5 (Algoritma Informasi-Abstrak), yang dikembangkan oleh Ronald L. Rivest dari MIT Laboratory untuk Ilmu Komputer dan RSA Data Security Inc pada awal 1990-an, dan dikembangkan oleh MD2, MD3 dan MD4.
MD5 digunakan untuk memastikan transmisi informasi yang lengkap dan konsisten. Ini adalah salah satu algoritma hash yang banyak digunakan oleh komputer (juga diterjemahkan sebagai algoritma abstrak dan algoritma hash). Bahasa pemrograman utama umumnya diimplementasikan oleh MD5. Menghitung data (seperti karakter Cina) menjadi nilai panjang tetap lainnya adalah prinsip dasar algoritma hash. Para pendahulu MD5 adalah MD2, MD3 dan MD4.
Fungsi MD5 adalah untuk memungkinkan informasi berkapasitas besar "dikompresi" menjadi format rahasia sebelum menandatangani kunci pribadi dengan perangkat lunak tanda tangan digital (yaitu, untuk mengubah string byte dengan panjang apa pun menjadi string heksadesimal dengan panjang tertentu).
2.2 Prinsip Algoritma
Deskripsi singkat tentang algoritma MD5 dapat sebagai berikut: MD5 memproses informasi input dalam paket 512-bit, dan setiap paket dibagi menjadi 16 sub-paket 32-bit. Setelah serangkaian pemrosesan, output dari algoritma terdiri dari empat paket 32-bit. Setelah meng-cascading keempat paket 32-bit ini, nilai hash 128-bit akan dihasilkan.
Dalam algoritma MD5, informasi perlu diisi terlebih dahulu, sehingga hasil dari keseimbangan yang tersisa dari pasangan bit panjangnya 512 sama dengan 448. Oleh karena itu, panjang bit informasi akan diperluas ke N*512+448, n adalah integer non-negatif, dan n dapat menjadi nol. Metode pengisian adalah sebagai berikut: Isi 1 dan 0s yang tak terhitung jumlahnya di belakang informasi, dan berhenti mengisi informasi dengan 0 sampai kondisi di atas dipenuhi. Kemudian, panjang informasi pengisian atas dilampirkan dalam biner 64-bit. Setelah dua langkah pemrosesan ini, panjang bit informasi = n*512+448+64 = (n+1)*512, yaitu, panjangnya persis kelipatan bilangan bulat 512. Alasan untuk ini adalah untuk memenuhi persyaratan untuk panjang informasi dalam pemrosesan berikutnya.
2.3 MD5 Implementasi di Java
Implementasi Java dari algoritma enkripsi MD5 adalah sebagai berikut:
Paket amigo.endecrypt; impor java.security.messagedigest;/*** Gunakan enkripsi md5* @author xingxing, xie* @dateTime 2014-5-31*/Kelas publik Md5util {/**** MD5 Enkripsi menghasilkan 32-bit Md5 kode* @parner @parurn @parurn* @parret* MD5 menghasilkan 32-bit Md5 kode* @parny @parny string public static md5Encode (string instr) melempar Exception {MessageSageSest md5 = null; coba {md5 = messageSageTigest.getInstance ("md5"); } catch (Exception e) {System.out.println (e.toString ()); e.printstacktrace (); kembali ""; } byte [] bytearray = instr.getbytes ("UTF-8"); byte [] md5bytes = md5.gigest (bytearray); StringBuffer hexValue = stringBuffer baru (); untuk (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (integer.tohexstring (val)); } return hexvalue.toString (); } / ** * Tes fungsi utama * @param args * @throws Exception * / public static void main (string args []) melempar pengecualian {string str = new string ("amigoxiexiexingxing"); System.out.println ("Asli:" + str); System.out.println ("MD5:" + MD5Encode (str)); }}Hasil tes:
Asli: amigoxiexiexingxing
Post-MD5: E9AC094091B96B84CCA48098BC21B1D6
3. Enkripsi SHA
3.1 Ikhtisar
SHA adalah algoritma enkripsi data. Algoritma ini telah dikembangkan dan ditingkatkan oleh para ahli enkripsi selama bertahun -tahun dan telah menjadi semakin sempurna. Sekarang telah menjadi salah satu algoritma hashing paling aman yang diakui dan telah banyak digunakan. Gagasan algoritma ini adalah untuk menerima teks biasa dan kemudian mengubahnya menjadi teks sandi (biasanya lebih kecil) dengan cara yang tidak dapat diubah. Ini juga dapat dengan mudah dipahami sebagai proses mengambil serangkaian kode input (disebut prakala atau informasi) dan mengubahnya menjadi urutan output panjang-panjang, fixed digit, yaitu nilai hash (juga dikenal sebagai informasi pencernaan atau kode otentikasi informasi). Nilai fungsi hash dapat dikatakan sebagai semacam "sidik jari" atau "ringkasan" dari plaintext, sehingga tanda tangan digital dari nilai hash dapat dianggap sebagai tanda tangan digital dari Plaintext.
Algoritma hash aman (SHA) adalah National Standard FIPS Pub 180 yang dirilis oleh National Institute of Standard and Technology. Standar terbaru telah diperbarui ke FIPS Pub 180-3 pada tahun 2008. Di antaranya, beberapa algoritma hashing searah seperti SHA-1, SHA-224, SHA-256, SHA-384, dan SHA-512 ditentukan. SHA-1, SHA-224 dan SHA-256 cocok untuk pesan dengan panjang tidak lebih dari 2^64 bit biner. SHA-384 dan SHA-512 cocok untuk pesan dengan panjang tidak lebih dari 2^128 bit biner.
3.2 Prinsip
SHA-1 adalah algoritma enkripsi data. Gagasan algoritma ini adalah untuk menerima teks biasa dan kemudian mengubahnya menjadi teks sandi (biasanya lebih kecil) dengan cara yang tidak dapat diubah. Ini juga dapat dengan mudah dipahami sebagai proses mengambil serangkaian kode input (disebut prakala atau informasi) dan mengubahnya menjadi urutan output panjang-panjang, fixed digit, yaitu nilai hash (juga dikenal sebagai informasi pencernaan atau kode otentikasi informasi).
Keamanan fungsi hash satu arah terletak pada sifat satu arah yang kuat dari proses operasinya menghasilkan nilai hash. Jika kata sandi tertanam dalam urutan input, tidak ada yang dapat menghasilkan nilai hash yang benar tanpa mengetahui kata sandi, sehingga memastikan keamanannya. SHA memblokir aliran input dalam 512 bit (64 byte) per blok dan menghasilkan 20 byte output yang disebut kode otentikasi informasi atau pencernaan informasi.
Panjang paket input algoritma ini tidak terbatas, dan output yang dihasilkan adalah pencernaan pesan 160-bit. Input diproses dalam paket 512-bit. SHA-1 tidak dapat diubah, tahan konflik, dan memiliki efek longsoran yang baik.
Tanda tangan digital dapat diimplementasikan melalui algoritma hash. Prinsip tanda tangan digital adalah untuk mengonversi teks biasa yang akan ditransmisikan ke pencernaan pesan melalui operasi fungsi (hash) (teks biasa yang berbeda sesuai dengan pencernaan pesan yang berbeda). Pencernaan pesan dienkripsi dan dikirim ke penerima bersama dengan teks biasa. Penerima menghasilkan pencernaan pesan baru untuk mendekripsi dan membandingkan pencernaan pesan pengirim. Hasil perbandingan konsisten, yang berarti bahwa teks biasa belum diubah. Jika tidak konsisten, itu berarti bahwa teks biasa telah dirusak.
Mac (Kode Otentikasi Informasi) adalah hasil hash, di mana bagian dari informasi input adalah kata sandi. Hanya peserta yang mengetahui kata sandi ini yang dapat menghitung dan memverifikasi legitimasi kode MAC lagi.
3.3 Implementasi SHA di Java
Implementasi Java SHA mirip dengan MD5, dan kode referensi adalah sebagai berikut:
Paket amigo.endecrypt; impor java.security.messagedigest;/*** Gunakan enkripsi SHAA* @author xingxing, xie* @dateTime 2014-6-1*/Kelas Public Shautil {/*** ENCRYTION SHA Menghasilkan kode 40-bit SHA 40-bit* @paramp string untuk menjadi encry {/**** SHA @Ra-Bit Kode SHA 40-bit* @paramp string untuk dikerjakan 40-BIT Code @parap untuk menjadi kode SHA 40-bit @paramp untuk menjadi encry {/**** shaencode (String Instr) melempar Exception {MessageSpingGest sha = null; Coba {sha = MessageDigest.getInstance ("sha"); } catch (Exception e) {System.out.println (e.toString ()); e.printstacktrace (); kembali ""; } byte [] bytearray = instr.getbytes ("UTF-8"); byte [] md5bytes = sha.digest (bytearray); StringBuffer hexValue = stringBuffer baru (); untuk (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (integer.tohexstring (val)); } return hexvalue.toString (); } / ** * Tes fungsi utama * @param args * @throws Exception * / public static void main (string args []) melempar pengecualian {string str = new string ("amigoxiexiexingxing"); System.out.println ("Asli:" + str); System.out.println ("Sha:" + shaencode (str)); }}Hasil tes adalah sebagai berikut:
Asli: amigoxiexiexingxing
Setelah SHA: 04F79F496DD6BDAB3439511606528A4AD9CAAC5E
3. Perbandingan antara SHA-1 dan MD5
Karena keduanya berasal dari MD4, SHA-1 dan MD5 sangat mirip satu sama lain. Sejalan dengan itu, kekuatan mereka dan karakteristik lainnya serupa, tetapi ada juga perbedaan dalam poin -poin berikut:
1) Keamanan terhadap serangan paksa: Perbedaan yang paling signifikan dan penting adalah bahwa Digest SHA-1 adalah 32 bit lebih panjang dari Digest MD5. Menggunakan teknologi paksa, kesulitan menghasilkan pesan apa pun sehingga pencernaannya sama dengan pencernaan yang diberikan adalah operasi urutan 2^128 untuk MD5 dan operasi 2^160 untuk SHA-1. Dengan cara ini, SHA-1 memiliki kekuatan yang lebih besar untuk serangan secara paksa.
2) Keamanan Analisis Kata Sandi: Karena desain MD5, rentan terhadap analisis kata sandi, dan SHA-1 tampaknya kurang rentan terhadap serangan tersebut.
3) Kecepatan: Pada perangkat keras yang sama, SHA-1 berjalan perlahan dari MD5.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.