Algoritma enkripsi umum
Algoritma enkripsi satu arah dasar:
Base64 Sebenarnya, itu milik format pengkodean, bukan algoritma enkripsi
MD5 (MessageDigestalgorithm5, Information Digest Algorithm)
SHA (SecureHashalgorithm, Secure Hash Algorithm)
HMAC (HashMessageAuthenticationCode, kode otentikasi pesan hash)
Enkripsi simetris kompleks (DES, PBE), algoritma enkripsi asimetris:
DES (DataCryptionStandard, Algoritma Enkripsi Data)
PBE (UePripsi Berbasis Kata Sandi, berdasarkan verifikasi kata sandi)
RSA (nama algoritma dinamai setelah penemu: Ronrivest, Adi Shamir dan Leonard Adleman)
DH (Algoritma Diffie-Hellman, Protokol Konsistensi Utama)
DSA (Algoritma DigitalSignature, Tanda Tangan Digital)
ECC (Elliptic Curves Cryptography)
Tanda tangan digital
Deskripsi singkat tentang algoritma
Algoritma tanda tangan digital dapat dianggap sebagai algoritma Digest pesan dengan kunci, dan kunci ini berisi kunci publik dan pribadi. Dengan kata lain, algoritma tanda tangan digital adalah kombinasi dari algoritma enkripsi asimetris dan algoritma Digest pesan.
Fitur
Algoritma tanda tangan digital membutuhkan kemampuan untuk memverifikasi integritas data, mengotentikasi sumber data, dan memainkan peran dalam menolak penolakan.
prinsip
Algoritma tanda tangan digital mencakup dua operasi: tanda tangan dan verifikasi, yang mengikuti metode tanda tangan kunci pribadi dan verifikasi kunci publik.
Saat menandatangani, kunci pribadi dan data yang akan ditandatangani harus digunakan. Saat memverifikasi, kunci publik, nilai tanda tangan dan data yang akan ditandatangani harus digunakan. Algoritma inti terutama adalah algoritma Pesan Digest.
1. Ringkasan Pesan
String beforedegist = "asdf"; System.out.println ("Sebelum" Ringkasan: "+Beforedegist); // Informasi awal harus dikonversi menjadi byte stream byte [] plaintext = beforedegist.getbytes (" utf8 "); // GetInstance (" algoritma ") untuk mendapatkan pesan di sini, di sini, di sini, 160-bit-bit md5 md5 md5 org algorm" untuk mendapatkan pesan di sini, di sini, di sini, 160-bit-bit md5 md5 md5 md5 md5 md5 org-md5 untuk mendapatkan pesan. = MessageDigest.getInstance ("SHA-1"); = string baru (MessageDigest.digest (), "UTF8");2. Enkripsi kunci pribadi
/*** Contoh ini adalah untuk mengenkripsi informasi string dengan kunci pribadi, dan kemudian mendekripsi dengan kunci pribadi untuk memverifikasi apakah itu konsisten. Kunci pribadi dienkripsi, yang merupakan enkripsi simetris* menggunakan algoritma simetris. Misalnya: A menggunakan kunci untuk mengenkripsi file, dan B membutuhkan kunci yang sama dengan A, dan kedua belah pihak berbagi kunci pribadi (dan di lingkungan web, kunci pribadi dengan mudah didengarkan ketika dilewatkan) * lampiran: AES simetris utama, dan dua bit), dan dua bit (dan dua bit (dan dua bit) (DEVERS, DONT), DET, dan KUNCI, DONT), PERTAMA, DET. */ <span style = "White-space: pre;"> </span> string sebelum = "asdf"; byte [] plaintext = sebelum.getBytes ("utf8"); // Langkah 1. System.out.println ("Mulai menghasilkan kunci AES."); // Dapatkan instance keygenerator menggunakan algoritma keygenerator keygenerator = keygenerator. keygen.generateKey (); System.out.println ("Selesai menghasilkan AES key ="+key);// Langkah 2.
// Dapatkan cipher kelas enkripsi kunci pribadi, mendefinisikan informasi dasar cipher: ECB adalah metode enkripsi, dan pkcs5padding adalah metode pengisian cipher cipher = cipher.getInstance ("AES/ECB/PKCS5PADDING"); //System.out.println("/n " + cipher.getProvider (). GetInfo ());// Langkah 3.
// Gunakan kunci pribadi untuk enkripsi system.out.println ("/n enkripsi dengan kunci pribadi ..."); // Gunakan kunci yang baru saja dihasilkan sebagai parameter, dan inisialisasi kelas enkripsi menggunakan kunci pribadi yang diperoleh sekarang. Cipher.encrypt_mode berarti enkripsi cipher.init (cipher.encrypt_mode, key); // kelas enkripsi kunci privat cipher dienkripsi, dan setelah enkripsi, string byte byte afterte afterte afterte afterte afterte afterte afterte afterte afterte afterte afterte afterte afterte [] String (ciphertext, "utf8"); System.out.println ("Lengkap dengan enkripsi kunci pribadi:"+after1);// Langkah 4.
[Java] Lihat Copy Plain // Gunakan kunci pribadi untuk mendekripsi informasi yang dienkripsi sekarang untuk melihat apakah itu konsisten. Cipher.decrypt_mode berarti decryption kunci system.out.println ("/n dekripsi dengan kunci pribadi ..."); cipher.init (cipher.decrypt_mode, kunci); // mendekripsi byte yang dienryped sekarang, dan mengembalikan stream byte setelah dekripsi [] byte yang dienkripsi (byte [] sekarang, dan mengembalikan aliran byte setelah dekripsi [] byte [ cipher.dofinal (ciphertext); string after2 = new string (newPlaintext, "utf8"); System.out.println ("Didekripsi dengan kunci pribadi:"+setelah2);3. Enkripsi Kunci Publik
String sebelum = "asdf"; byte [] plaintext = sebelum.getbytes ("utf8"); // menghasilkan keypairgenerator generator kunci RSA (seperti namanya: sepasang generator kunci) keypairgenerator (lengthgenerator. Hasilkan kunci melalui keyPairGenerator, Catatan: Kunci di sini adalah sepasang kunci! Lai Key keyPair = keygen.generatePeYPAIR (); // Dapatkan kelas cipher RSA, dienkripsi menggunakan cipher cipher kunci publik = cipher.getInstance ("rsa/ecb/pkcs1padding"); // system.out.println ("/n" + cipher.grugher "). System.out.println ("/n Dienkripsi dengan kunci publik ..."); // cipher.encrypt_mode berarti enkripsi, dapatkan kunci publik dari sepasang keys.getPublic () cipher.init (cipher.encrypt_mode, keipe. cipher.dofinal (plaintext); // Konversi stream byte menjadi string dalam format utf8 string after1 = string baru (cipherText, "utf8"); System.out.println ("Gunakan enkripsi kunci publik:"+After1); // decrypt system.out.println ("/ndecrypt dengan kunci pribadi ..."); // cipher.decrypt_mode berarti mode dekripsi, dapatkan kunci pribadi dari sekelompok kunci. key.getPrivate ()); // dekripsi dengan kunci pribadi dan mengembalikan byte stream byte [] newPlaintext = cipher.dofinal (cipherText); string after2 = new string (newPlaintext, "utf8"); system.out.println ("dekripsi dengan kunci pribadi:"+setelah2);4. Tanda Tangan Digital
/*** Contoh ini adalah contoh tanda tangan digital. Gunakan kunci pribadi RSA untuk menandatangani pesan pencernaan (di sini mengacu pada data asli), dan kemudian gunakan kunci publik untuk memverifikasi tanda tangan * * A mengenkripsi data dengan kunci publik B dan mengirimkannya ke Kunci B. B menggunakan kunci pribadi B untuk mendekripsi untuk mendapatkan data yang diperlukan (data yang tidak dapat dikenakan oleh B tidak dapat dikenakan oleh C private. Kunci publik B untuk mengenkripsi salinan data dan mengirimkannya ke B. Dengan cara ini, pertanyaannya adalah, apakah data yang diterima oleh B? B, and A needs to prepare two parts: 1 and 2* 1: A uses B's public key to encrypt the original information to serve as a confidentiality (only B's private key can be unwrapped, but others cannot unwrap other keys, of course it is confidential) * 2: A uses A's private key to sign the digest of the original information to serve as the receiver B's function to determine that it was sent by A (A uses A's private key to sign the digest of the target data * and then meneruskannya ke B. Pada saat yang sama, C menggunakan kunci pribadi C untuk menandatangani informasi apa pun kepada B. Apa yang B ingin terima adalah data A (seperti permintaan transfer), jadi B * mendekripsi dua informasi yang diterima melalui kunci publik A, dan apa yang tidak dibungkus adalah (a public can a can (a hanya dapat membuka ppluk (plow exryped dari a dari a private key) */string a. sebelum.getbytes ("UTF8"); // Bentuk keypiirgenerator kunci Publik RSA keygenerator = keyPairGenerator.getInstance ("RSA"); keygen.initialize (1024); KeyPair key = keygen.generatePiPair (); // Masuk dengan kunci pribadi ******************************************* Signature Sig = Signature.getinstance ("sha1withrsa"); sig.initSign(key.getPrivate());//sig object obtains the private key//Signed object obtains the original data sig.update(plainText);//sig object obtains the original data (in reality, the digest of the original data is used, and the digest is one-way, that is, it cannot be decrypted after the digest algorithm) byte[] signature = SIG.SIGN (); // SIG Objek menggunakan kunci pribadi untuk menandatangani data asli, dan mendapatkan tanda tangan setelah menandatangani tanda tangan EM.out.println (sig.getProvider (). getInfo ()); String after1 = string baru (tanda tangan, "utf8"); system.out.println ("/nSign dengan kunci pribadi:"+after1); // Gunakan kunci publik untuk memverifikasi sig.initverify (key.getpublic (); // objek SIG mendapatkan kunci publik // objek tanda mendapat informasi asli Sig.update (plaintext); (sig.verify(signature)) {//Sig object decrypts the signature with public key to obtain the original data (i.e., summary), if true System.out.println("Signature verification is correct!!" +new String(plainText, "UTF8"));} else {System.out.println("Signature verification failed!!");}}catch (SignatureException e) {System.out.println ("Verifikasi Tanda Tangan Gagal !!");}5. Sertifikat Digital
/*** Contoh ini adalah operasi pada file "Sertifikat Digital"* Platform Java (menginstal JDK di mesin) memberi Anda keystore (Perpustakaan Sertifikat). Perintah KeyTool disediakan di bawah CMD untuk membuat Perpustakaan Sertifikat * * Sebelum menjalankan contoh ini: * Buat sertifikat di direktori disk C, tentukan pustaka sertifikat untuk menjadi bocsoftkeylib, dan buat sertifikat dengan sertiftifikasi test alias. It specifies that it is generated using the * RSA algorithm, and the key length is 1024, and the certificate is valid for 1 year* The export certificate file is TC.cer, which is already stored on the local disk C:/ * The password is qazzaq */try {//Preparation: Export a certificate from the certificate library to the certificate file (the certificate file in the example I wrote is TC.cer) //Read certificate information from the certificate file TC.cer CertificateFactory cf = CertificateFactory.getInstance("X.509");FileInputStream in = new FileInputStream("C:/TC.cer");//Read the file into the certificate class Certificate in the form of a file stream Certificate c = cf.generateCertificate (in); System.err.println ("Informasi Sertifikat Setelah Mengonversi ke String:"+C.ToString ());*// atau jangan gunakan metode kode di atas, baca informasi sertifikat langsung dari perpustakaan sertifikat, yang persis sama dengan string pass = "Qazzaq"; Fileinputate, yang sama dengan string pass = "Qazzaq"; Newinputate, yang di atas String Pass = "Qazzaq"; Newinputate di atas2; FileInputStream ("c:/bocsoftKeylib"); keystore ks = keystore.getInstance ("jks"); ks.load (in2, pass.tochararray ()); string alias = "testcertification aftercertification; String: "+c.tostring ()); // Dapatkan objek tipe X509Certificate. Ini adalah subkelas dari kelas sertifikat untuk mendapatkan sertifikat, dan mengimplementasikan lebih banyak metode x509certificate t = (x509certificate) c; // Ekstrak informasi yang diperlukan dari sistem informasi.out.println ("Nomor Versi:"+T.getVersion ()); System.out.println ("serial:"+T.getVersion ()); System.out.println ("serial:"+T.getVersion ()); System.out.println ("serial:"+t.getVersion ()); Nomor: "+T.GetSerialNumber (). ToString (16)); System.out.println (" Nama Subjek ":"+T.GetSubjectDn ()); System.out.println ("Penerbit:"+T.Getissuerdn ()); System.out.println ("Validitas Periode:" "+t.getNotBefore ()); System.out.println (" Algoritma Signature: "+T.GetSigalGname ()); byte [] sig = t.getSignature (); // nilai publicKey pk = t.getPublickey (); byte [] pkenc = pketen (pkret (); byte () byte (); ; Tanggal Sertifikat! "); // Verifikasi validitas tanda tangan sertifikat dan mengeluarkan sertifikat CA kepada pelanggan melalui organisasi Pusat Sertifikat Digital Certificate Certificate (CA), seperti: CAROOT.crt file // Saya tidak memiliki sertifikat yang dikeluarkan untuk saya oleh CA, jadi kode CAOC." = CF.GenerateCertificate (IN3); Periksa: kadaluwarsa System.out.println ("Pemeriksaan Validitas Tanggal Sertifikat: Kedaluwarsa"); } Catch (Pemeriksaan Validitas Tanggal Sertifikat: Kedaluwarsa ");} Catch (Pemeriksaan Validitas Tanggal Sertifikat: Kedaluwarsa"); } Catch (Pemeriksaan Validitas Tanggal Sertifikat: kedaluwarsa ");} catch (FileNotFoundException CE) {ce.printstacktrace ();} catch (filenotfoundException fe) {fe.printstacktrace ();} /*Catch (ioException IoE {{} {} {} {} {} {{ioException {{{} {{} {{} {{} {{{{IoException) e) {e.printstacktrace ();}}Meringkaskan
Di atas adalah semua tentang contoh kode lengkap dari enkripsi dan dekripsi dan tanda tangan digital. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!