Algoritma enkripsi simetris merupakan algoritma enkripsi sebelumnya dengan teknologi yang matang. Dalam algoritma enkripsi simetris, pengirim data memproses teks biasa (data asli) dan kunci enkripsi (mi yue) bersama-sama dengan algoritma enkripsi khusus, mengubahnya menjadi teks sandi terenkripsi yang kompleks dan mengirimkannya. Setelah penerima menerima ciphertext, jika dia ingin menguraikan teks asli, dia perlu menggunakan kunci yang digunakan untuk enkripsi dan algoritma kebalikan dari algoritma yang sama untuk mendekripsi ciphertext guna mengembalikannya ke plaintext yang dapat dibaca. Dalam algoritma enkripsi simetris, hanya satu kunci yang digunakan. Baik pengirim maupun penerima menggunakan kunci ini untuk mengenkripsi dan mendekripsi data. Hal ini mengharuskan dekripsi untuk mengetahui kunci enkripsi terlebih dahulu.
Algoritma enkripsi java sederhana adalah:
BASE sebenarnya adalah format pengkodean, bukan algoritma enkripsi
MD (Algoritma Intisari Pesan, algoritma intisari pesan)
SHA (Algoritma Hash Aman, algoritma hash aman)
HMAC (Kode Otentikasi Pesan Hash, kode otentikasi pesan hash)
Tipe 1. DASAR
Base adalah salah satu metode pengkodean paling umum untuk mentransmisikan kode Bit-byte di Internet. Anda dapat melihat RFC~RFC, yang memiliki spesifikasi terperinci untuk MIME. Pengkodean dasar dapat digunakan untuk menyampaikan informasi identifikasi yang lebih panjang dalam lingkungan HTTP. Misalnya, dalam sistem Persistensi Java Hibernate, Base digunakan untuk mengkodekan pengidentifikasi unik yang panjang (biasanya -bit UUID) menjadi string, yang digunakan sebagai parameter dalam formulir HTTP dan URL GET HTTP. Dalam aplikasi lain, seringkali diperlukan untuk menyandikan data biner ke dalam bentuk yang sesuai untuk ditempatkan di URL (termasuk bidang formulir tersembunyi). Saat ini, pengkodean Base tidak dapat dibaca, artinya data yang dikodekan tidak akan langsung terlihat dengan mata telanjang. (Sumber: Ensiklopedia Baidu)
kode implementasi java:
paket com.cn.Enkripsi dan dekripsi satu arah; import sun.misc.BASEDecoder; import sun.misc.BASEEncoder;/*Enkripsi dan dekripsi BASE adalah implementasi JDK tidak resmi kelas. Meskipun dapat ditemukan dan digunakan di JDK, namun tidak dapat ditemukan di API. Kelas-kelas yang dimulai dengan sun dan com.sun di JRE tidak berdokumen, dan termasuk dalam basis perpustakaan kelas java dan javax. Sebagian besar implementasinya terkait dengan platform yang mendasarinya dan umumnya tidak direkomendasikan. Sebenarnya, BASE adalah format pengkodean, sedangkan algoritma non-enkripsi terutama mencakup dua kelas BASEEncoder dan BASEDecoder. Kita hanya perlu mengetahui cara menggunakan metode yang sesuai. Selain itu, jumlah byte yang dihasilkan setelah enkripsi BASE adalah kelipatan . Jika jumlah byte tidak mencukupi, isikan dengan simbol =. BASE Menurut definisi RFC, Base didefinisikan sebagai: Pengkodean transfer konten dasar dirancang untuk menggambarkan urutan bit dalam bentuk yang tidak mudah dikenali langsung oleh manusia. (Pengkodean-Transfer-Konten Dasar dirancang untuk mewakili urutan oktet sewenang-wenang dalam bentuk yang tidak perlu dibaca manusia.) Biasa terlihat di email dan enkripsi http. Saat mencegat informasi http, Anda akan menemukan bidang nama pengguna dan kata sandi untuk login operasi. Dienkripsi melalui BASE. */public class BASE { /** * Dekripsi BASE* * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) throws Exception { return (new BASEDecoder()).decodeBuffer(key } /** * Enkripsi BASE* * @param key * @return * @throws Pengecualian */ public static String encryptBASE(byte[] key) melempar Pengecualian { return (BASEEncoder()).encodeBuffer(key); public static void main(String[] args) { String str=""; coba { String result= BASE.encryptBASE(str.getBytes()); out.println("hasil=====data terenkripsi=========="+hasil); byte hasil[]= BASE.decryptBASE(hasil); str=String baru(hasil); System.out.println("str========Data yang didekripsi========"+str); } catch (Pengecualian e) { e.printStackTrace( );
Tipe kedua
MD adalah Algoritma Intisari Pesan (Message-Digest Algorithm), yang digunakan untuk memastikan transmisi informasi yang lengkap dan konsisten. Ini adalah salah satu algoritma hash yang banyak digunakan di komputer (juga diterjemahkan sebagai algoritma intisari dan algoritma hash). MD umumnya telah diterapkan dalam bahasa pemrograman arus utama. Menghitung data (seperti karakter Cina) menjadi nilai dengan panjang tetap lainnya adalah prinsip dasar algoritma hash. Pendahulu MD adalah MD, MD dan MD. Banyak digunakan dalam teknologi enkripsi dan dekripsi, sering digunakan untuk verifikasi file. memeriksa? Tidak peduli seberapa besar file tersebut, nilai MD unik dapat dihasilkan setelah MD. Misalnya kalibrasi ISO saat ini adalah kalibrasi MD. Bagaimana cara menggunakannya? Tentu saja nilai MD dihasilkan setelah ISO dilewatkan melalui MD. Umumnya sobat yang sudah download linux-ISO pasti melihat string MD di sebelah link download. Ini digunakan untuk memverifikasi apakah file konsisten.
implementasi java:
paket com.cn.Enkripsi satu arah; import java.math.BigInteger; import java.security.MessageDigest;/*MD (Algoritma Intisari Pesan, algoritma intisari pesan) Biasanya kami tidak langsung menggunakan enkripsi MD di atas. Biasanya, array byte yang dihasilkan oleh MD diserahkan ke BASE dan kemudian dienkripsi untuk mendapatkan string yang sesuai Intisari: assembly*/public class MD { public static final String KEY_MD = "MD"; public static String getResult(String inputStr) { Sistem .out.println("========Data sebelum enkripsi:"+inputStr); BigInteger bigInteger=null; MessageDigest.getInstance(KEY_MD); byte[] inputData = inputStr.getBytes(); md.update(inputData); bigInteger = new BigInteger(md.digest()); } System.out.println("Setelah enkripsi MD:" + bigInteger.toString()); bigInteger.toString(); } public static void main(String args[]) { coba { String inputStr = "Enkripsi sederhana"; getResult(inputStr } catch (Pengecualian e) { e.printStackTrace();
Algoritma MD memiliki ciri-ciri sebagai berikut:
. Kompresibilitas: Untuk data dengan panjang berapa pun, panjang nilai MD yang dihitung adalah tetap.
, Mudah dihitung: Mudah menghitung nilai MD dari data asli.
Resistensi modifikasi: Jika ada perubahan yang dilakukan pada data asli, meskipun hanya satu byte yang diubah, nilai MD yang dihasilkan akan sangat berbeda.
, Anti-tabrakan yang lemah: Mengetahui data asli dan nilai MD-nya, sangat sulit untuk menemukan data dengan nilai MD yang sama (yaitu data palsu).
, Anti-tabrakan yang kuat: Sangat sulit untuk menemukan dua data berbeda sehingga memiliki nilai MD yang sama.
Fungsi MD adalah untuk memungkinkan informasi berkapasitas besar untuk "dikompresi" ke dalam format rahasia (yaitu, untuk mengubah string byte dengan panjang berapa pun menjadi string digit heksadesimal dengan panjang tertentu) sebelum menandatangani kunci pribadi dengan digital perangkat lunak tanda tangan. Selain MD, yang lebih terkenal antara lain sha-, RIPEMD dan Haval.
Tipe ketiga.SHA
Algoritma Hash Aman terutama berlaku untuk DSA Algoritma Tanda Tangan Digital yang ditentukan dalam DSS Standar Tanda Tangan Digital. Untuk pesan yang panjangnya kurang dari ^ bit, SHA menghasilkan intisari pesan satu bit. Algoritma ini telah dikembangkan dan diperbaiki oleh para ahli enkripsi selama bertahun-tahun dan semakin disempurnakan serta digunakan secara luas. Ide dari algoritma ini adalah untuk menerima sepotong teks biasa dan kemudian mengubahnya menjadi sepotong teks tersandi (biasanya lebih kecil) dengan cara yang tidak dapat diubah. Ini juga dapat dipahami sebagai mengambil serangkaian kode masukan (disebut pra-pemetaan). atau informasi), dan Proses mengubahnya menjadi rangkaian keluaran digit tetap dan pendek, yaitu nilai hash (juga disebut intisari pesan atau kode autentikasi pesan). Nilai fungsi hash dapat dikatakan sebagai “fingerprint” atau “digest” dari plaintext, sehingga tanda tangan digital dari nilai hash dapat dikatakan sebagai tanda tangan digital dari plaintext.
implementasi java:
paket com.cn.Enkripsi satu arah; import java.math.BigInteger; import java.security.MessageDigest;/*SHA (Algoritma Hash Aman, algoritma hash aman), tanda tangan digital dan alat penting lainnya dalam aplikasi kriptografi, banyak digunakan Ini banyak digunakan di bidang keamanan informasi seperti e-commerce. Meskipun SHA dan MD telah di-crack melalui metode tabrakan, SHA masih merupakan algoritma enkripsi aman yang diakui dan lebih aman daripada MD*/public class SHA { public static final String KEY_SHA = "SHA"; public static String getResult( String inputStr) { BigInteger sha =null; System.out.println("========Data sebelum enkripsi:"+inputStr byte[] inputData = inputStr.getBytes(); coba { MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA); messageDigest.update(inputData); sha = new BigInteger(messageDigest.digest()); sha.toString()); } catch (Pengecualian e) {e.printStackTrace();} kembali sha.toString(); } public static void main(String args[]) { coba { String inputStr = "Enkripsi sederhana"; getResult(inputStr } catch (Pengecualian e) { e.printStackTrace();
SHA-Perbandingan dengan MD
Karena keduanya berasal dari MD, SHA- dan MD sangat mirip satu sama lain. Sejalan dengan itu, kekuatan dan karakteristik lainnya serupa, namun ada beberapa perbedaan:
Keamanan terhadap serangan brute force: Perbedaan paling signifikan dan penting adalah SHA-digest lebih panjang dibandingkan MD-digest. Dengan menggunakan teknik brute force, kesulitan dalam menghasilkan pesan apa pun yang intisarinya sama dengan intisari pesan tertentu adalah operasi urutan besarnya untuk MD dan operasi urutan besarnya untuk SHA-. Dengan cara ini, SHA- memiliki kekuatan lebih besar terhadap serangan brute force.
Keamanan terhadap kriptanalisis: Karena desain MD, yang rentan terhadap serangan kriptanalisis, SHA- tampaknya kurang rentan terhadap serangan tersebut.
Kecepatan: SHA- berjalan lebih lambat dari MD pada perangkat keras yang sama.
Tipe keempat.HMAC
HMAC (Kode Otentikasi Pesan Hash, kode otentikasi pesan hash, protokol otentikasi berdasarkan algoritma Hash kunci. Prinsip kode otentikasi pesan untuk mencapai otentikasi adalah dengan menggunakan fungsi publik dan kunci untuk menghasilkan nilai panjang tetap sebagai pengidentifikasi otentikasi. Gunakan ini Mengidentifikasi integritas pesan. Gunakan kunci untuk menghasilkan blok data kecil dengan ukuran tetap, yaitu MAC, dan tambahkan ke pesan, lalu kirimkan menggunakan kunci yang dibagikan dengan pengirim untuk otentikasi.
kode implementasi java:
paket com.cn.Enkripsi satu arah;/*HMACHMAC(Otentikasi Pesan Hash Kode, kode otentikasi pesan hash, protokol otentikasi berdasarkan algoritma Hash kunci Prinsip kode otentikasi pesan adalah menggunakan fungsi publik dan kunci untuk menghasilkan nilai dengan panjang tetap sebagai pengidentifikasi otentikasi, dan menggunakan pengidentifikasi ini untuk mengautentikasi integritas. pesan. Jenis Kelamin. Gunakan kunci untuk menghasilkan blok data kecil dengan ukuran tetap, yaitu MAC, dan tambahkan ke pesan, lalu kirimkan. Penerima menggunakan kunci yang dibagikan dengan pengirim untuk otentikasi, dll. */impor javax.crypto javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.cn.comm.Tools;/** * Komponen enkripsi dasar*/ public abstract class HMAC { public static final String KEY_MAC = "HmacMD"; /** * Inisialisasi kunci HMAC* * @return * @throws Pengecualian */ String statis publik initMacKey() melempar Pengecualian { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return BASE.encryptBASE(secretKey.getEncoded()); kunci * @return * @throws Pengecualian */ public static String encryptHMAC(byte[] data, String key) melempar Pengecualian { SecretKey secretKey = new SecretKeySpec(BASE.decryptBASE(key), KEY_MAC); Mac mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); kembalikan String baru(mac.doFinal(data)); String statis getResult(String inputStr) { Jalur string=Alat.getClassPath(); String fileSource=path+"/file/HMAC_key.txt"; System.out.println("========Data sebelum enkripsi:"+inputStr); getBytes(); Kunci string = HMAC.initMacKey(); /*Buat kunci*/ System.out.println("Kunci Mac:===" + kunci); Tools.WriteMyFile(fileSource,key); hasil= HMAC.encryptHMAC(inputData, key); System.out.println("Setelah enkripsi HMAC:===" + hasil } catch (Pengecualian e) {e.printStackTrace( );} mengembalikan hasil.toString(); } string statis publik getResult(String inputStr) { System.out.println("========Data sebelum enkripsi:"+inputStr); String path=Tools.getClassPath(); String fileSource=path+"/file/HMAC_key.txt"; ;; coba { /*Baca kunci dari file*/ key=Tools.ReadMyFile(fileSource); System.out.println("getResult key:===" + key); (Pengecualian e) { e.printStackTrace();} String hasil=null; coba { byte[] inputData = inputStr.getBytes(); /*Enkripsi data*/ hasil= HMAC.encryptHMAC(inputData, kunci); .println("Setelah enkripsi HMAC:===" + hasil); catch (Pengecualian e) {e.printStackTrace();} mengembalikan result.toString(); main(String args[]) { try { String inputStr = "Enkripsi sederhana"; /*Gunakan kunci yang sama: Enkripsi data: Periksa apakah hasil kedua enkripsi sama*/ getResult(inputStr); ); } tangkapan (Pengecualian e) { e.printStackTrace();
Konten di atas adalah beberapa algoritma enkripsi (empat jenis) yang umum digunakan di Java yang dibagikan oleh editor.