Kriptografi Java - Panduan Cepat
Kriptografi adalah seni dan ilmu membuat suatu sistem kriptografi yang mampu memberikan keamanan informasi.
Kriptografi berkaitan dengan pengamanan aktual data digital. Ini mengacu pada desain mekanisme berdasarkan algoritma matematika yang menyediakan layanan keamanan informasi dasar. Anda dapat menganggap kriptografi sebagai pembuatan toolkit besar yang berisi teknik berbeda dalam aplikasi keamanan.
Apa itu Kriptanalisis?
Seni dan ilmu memecahkan teks sandi dikenal sebagai pembacaan sandi.
Kriptanalisis adalah cabang dari kriptografi dan keduanya hidup berdampingan. Proses kriptografi menghasilkan teks sandi untuk transmisi atau penyimpanan. Ini melibatkan studi tentang mekanisme kriptografi dengan maksud untuk memecahkannya. Kriptanalisis juga digunakan selama desain teknik kriptografi baru untuk menguji kekuatan keamanannya.
Kriptografi Primitif
Kriptografi primitif tidak lain adalah alat dan teknik dalam Kriptografi yang dapat digunakan secara selektif untuk menyediakan satu set layanan keamanan yang diinginkan -
- Encryption
- Fungsi hash
- Kode Otentikasi Pesan (MAC)
- Tanda Tangan Digital
Kriptografi di Jawa
Java Cryptography Architecture (JCA) adalah seperangkat API untuk mengimplementasikan konsep kriptografi modern seperti tanda tangan digital, intisari pesan, sertifikat, enkripsi, pembuatan dan manajemen kunci, dan pembuatan nomor acak yang aman, dll.
Menggunakan pengembang JCA dapat membangun aplikasi mereka yang mengintegrasikan keamanan di dalamnya.
Untuk mengintegrasikan keamanan dalam aplikasi Anda daripada bergantung pada algoritme keamanan yang rumit, Anda dapat dengan mudah memanggil masing-masing API yang disediakan di JCA untuk layanan yang diperlukan.
Fungsi hash sangat berguna dan muncul di hampir semua aplikasi keamanan informasi.
Fungsi hash adalah fungsi matematika yang mengubah nilai input numerik menjadi nilai numerik terkompresi lainnya. Input ke fungsi hash memiliki panjang sembarang tetapi output selalu memiliki panjang tetap.
Nilai yang dikembalikan oleh fungsi hash dipanggil message digest atau sederhananya hash values. Gambar berikut mengilustrasikan fungsi hash.
Java menyediakan kelas bernama MessageDigestyang termasuk dalam paket java.security. Kelas ini mendukung algoritme seperti algoritme SHA-1, SHA 256, MD5 untuk mengonversi pesan panjang arbitrer menjadi intisari pesan.
Untuk mengubah pesan yang diberikan menjadi intisari pesan, ikuti langkah-langkah yang diberikan di bawah ini -
Langkah 1: Buat objek MessageDigest
Kelas MessageDigest menyediakan metode bernama getInstance(). Metode ini menerima variabel String yang menetapkan nama algoritma yang akan digunakan dan mengembalikan objek MessageDigest yang mengimplementasikan algoritma yang ditentukan.
Buat objek MessageDigest menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
MessageDigest md = MessageDigest.getInstance("SHA-256");
Langkah 2: Teruskan data ke objek MessageDigest yang dibuat
Setelah membuat objek message digest, Anda perlu meneruskan pesan / data ke dalamnya. Anda dapat melakukannya dengan menggunakanupdate() metode dari MessageDigest class, metode ini menerima array byte yang mewakili pesan dan menambahkan / meneruskannya ke objek MessageDigest yang dibuat di atas.
md.update(msg.getBytes());
Langkah 3: Buat intisari pesan
Anda dapat membuat intisari pesan menggunakan digest() metode od kelas MessageDigest metode ini menghitung fungsi hash pada objek saat ini dan mengembalikan intisari pesan dalam bentuk array byte.
Buat intisari pesan menggunakan metode intisari.
byte[] digest = md.digest();
Contoh
Berikut ini adalah contoh yang membaca data dari file dan menghasilkan intisari pesan dan mencetaknya.
import java.security.MessageDigest;
import java.util.Scanner;
public class MessageDigestExample {
public static void main(String args[]) throws Exception{
//Reading data from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter the message");
String message = sc.nextLine();
//Creating the MessageDigest object
MessageDigest md = MessageDigest.getInstance("SHA-256");
//Passing data to the created MessageDigest Object
md.update(message.getBytes());
//Compute the message digest
byte[] digest = md.digest();
System.out.println(digest);
//Converting the byte array in to HexString format
StringBuffer hexString = new StringBuffer();
for (int i = 0;i<digest.length;i++) {
hexString.append(Integer.toHexString(0xFF & digest[i]));
}
System.out.println("Hex format : " + hexString.toString());
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3
MAC (Mesase Authentication Code) adalah teknik kriptografi kunci simetris untuk memberikan otentikasi pesan. Untuk menetapkan proses MAC, pengirim dan penerima berbagi kunci simetris K.
Pada dasarnya, MAC adalah checksum terenkripsi yang dibuat pada pesan yang mendasari yang dikirim bersama dengan pesan untuk memastikan otentikasi pesan.
Proses menggunakan MAC untuk otentikasi digambarkan dalam ilustrasi berikut -
Di Jawa, file Mac kelas dari javax.cryptopaket menyediakan fungsionalitas kode otentikasi pesan. Ikuti langkah-langkah yang diberikan di bawah ini untuk membuat kode otentikasi pesan menggunakan kelas ini.
Langkah 1: Buat objek KeyGenerator
Itu KeyGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritma penghasil kunci yang diperlukan dan mengembalikan a KeyGenerator objek yang menghasilkan kunci rahasia.
Membuat KeyGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
Langkah 2: Buat objek SecureRandom
Itu SecureRandom kelas dari java.Securitypaket menyediakan generator nomor acak yang kuat yang digunakan untuk menghasilkan nomor acak di Jawa. Instantiate kelas ini seperti yang ditunjukkan di bawah ini.
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
Langkah 3: Inisialisasi KeyGenerator
Itu KeyGenerator kelas menyediakan metode bernama init() metode ini menerima SecureRandom objek dan menginisialisasi arus KeyGenerator.
Inisialisasi objek KeyGenerator yang dibuat pada langkah sebelumnya menggunakan metode ini.
//Initializing the KeyGenerator
keyGen.init(secRandom);
Langkah 4: Buat kunci
Hasilkan kunci menggunakan generateKey() metode dari KeyGenerator kelas seperti yang ditunjukkan di bawah ini.
//Creating/Generating a key
Key key = keyGen.generateKey();
Langkah 5: Inisialisasi objek Mac
Itu init() metode kelas Mac menerima objek Key dan menginisialisasi objek Mac saat ini menggunakan kunci yang diberikan.
//Initializing the Mac object
mac.init(key);
Langkah 6: Selesaikan operasi mac
Itu doFinal()metode kelas Mac digunakan untuk menyelesaikan operasi Mac. Teruskan data yang diperlukan dalam bentuk array byte ke metode ini dan selesaikan operasi seperti yang ditunjukkan di bawah ini.
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
Contoh
Contoh berikut menunjukkan pembuatan Message Authentication Code (MAC) menggunakan JCA. Di sini, kami menerima pesan sederhana "Hai apa kabar" dan, buat Mac untuk pesan itu.
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
public class MacSample {
public static void main(String args[]) throws Exception{
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
//Initializing the KeyGenerator
keyGen.init(secRandom);
//Creating/Generating a key
Key key = keyGen.generateKey();
//Creating a Mac object
Mac mac = Mac.getInstance("HmacSHA256");
//Initializing the Mac object
mac.init(key);
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
System.out.println("Mac result:");
System.out.println(new String(macResult));
}
}
Keluaran
Program di atas akan menghasilkan keluaran sebagai berikut -
Mac result:
HÖ„^ǃÎ_Utbh…?š_üzØSSÜh_ž_œa0ŽV?
Kriptosistem adalah implementasi dari teknik kriptografi dan infrastruktur yang menyertainya untuk menyediakan layanan keamanan informasi. Sebuah sistem kriptografi juga disebut sebagai acipher system.
Berbagai komponen dari sistem kriptografi dasar adalah Plaintext, Encryption Algorithm, Ciphertext, Decryption Algorithm, Kunci Enkripsi dan, Kunci Dekripsi.
Dimana,
Encryption Keyadalah nilai yang diketahui pengirimnya. Pengirim memasukkan kunci enkripsi ke dalam algoritma enkripsi bersama dengan teks biasa untuk menghitung teks sandi.
Decryption Keyadalah nilai yang diketahui penerima. Kunci dekripsi terkait dengan kunci enkripsi, tetapi tidak selalu identik dengannya. Penerima memasukkan kunci dekripsi ke dalam algoritma dekripsi bersama dengan teks sandi untuk menghitung teks biasa.
Pada dasarnya terdapat dua jenis kunci / sistem kriptografi berdasarkan jenis algoritma enkripsi-dekripsi.
Enkripsi Kunci Simetris
Proses enkripsi dimana same keys are used for encrypting and decrypting informasi tersebut dikenal sebagai Enkripsi Kunci Simetris.
Studi tentang sistem kriptografi simetris disebut sebagai symmetric cryptography. Sistem kriptografi simetris terkadang juga disebut sebagaisecret key cryptosystems.
Berikut adalah beberapa contoh umum dari enkripsi kunci simetris -
- Standar Enkripsi Digital (DES)
- Triple-DES (3DES)
- IDEA
- BLOWFISH
Enkripsi Kunci Asimetris
Proses enkripsi dimana different keys are used for encrypting and decrypting the informationdikenal sebagai Enkripsi Kunci Asimetris. Meskipun kuncinya berbeda, mereka secara matematis terkait dan karenanya, mengambil teks biasa dengan mendekripsi teks sandi adalah mungkin.
Kunci dan sertifikat yang digunakan / dibuat disimpan dalam basis data yang disebut keystore. Secara default database ini disimpan dalam sebuah file bernama.keystore.
Anda dapat mengakses konten database ini menggunakan KeyStore kelas dari java.securitypaket. Ini mengelola tiga entri berbeda yaitu, PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry.
- PrivateKeyEntry
- SecretKeyEntry
- TrustedCertificateEntry
Menyimpan Kunci di keystore
Di bagian ini, kita akan mempelajari cara menyimpan kunci di keystore. Untuk menyimpan kunci di keystore, ikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyStore
Itu getInstance() metode dari KeyStore kelas dari java.security paket menerima nilai string yang mewakili jenis keystore dan mengembalikan objek KeyStore.
Buat objek dari kelas KeyStore menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
Langkah 2: Muat objek KeyStore
Itu load() metode kelas KeyStore menerima objek FileInputStream yang mewakili file keystore dan parameter String yang menentukan sandi KeyStore.
Secara umum, KeyStore disimpan dalam file bernama cacerts, di lokasi C:/Program Files/Java/jre1.8.0_101/lib/security/ dan kata sandi defaultnya adalah changeit, muat menggunakan load() metode seperti yang ditunjukkan di bawah ini.
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
Langkah 3: Buat objek KeyStore.ProtectionParameter
Buat instance KeyStore.ProtectionParameter seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Langkah 4: Buat objek SecretKey
Buat SecretKey (interface) dengan membuat instance kelas Sub-nya SecretKeySpec. Saat membuat instance, Anda perlu meneruskan kata sandi dan algoritma sebagai parameter ke konstruktornya seperti yang ditunjukkan di bawah ini.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Langkah 5: Buat objek SecretKeyEntry
Buat objek dari SecretKeyEntry kelas dengan melewati SecretKey objek yang dibuat pada langkah di atas seperti yang ditunjukkan di bawah ini.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
Langkah 6: Setel entri ke KeyStore
Itu setEntry() metode dari KeyStore kelas menerima parameter String yang mewakili alias entri keystore, a SecretKeyEntry object, sebuah object ProtectionParameter dan, menyimpan entri di bawah alias yang diberikan.
Setel entri ke keystore menggunakan setEntry() metode seperti yang ditunjukkan di bawah ini.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Example
Contoh berikut menyimpan kunci ke dalam keystore yang ada di file "cacerts" (sistem operasi windows 10).
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class StoringIntoKeyStore{
public static void main(String args[]) throws Exception {
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
//Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, password);
System.out.println("data stored");
}
}
Output
Program di atas menghasilkan keluaran berikut -
System.out.println("data stored");
Pada bab ini, kita akan belajar cara mengambil kunci dari keystore menggunakan Kriptografi Java.
Untuk mengambil kunci dari keystore, ikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyStore
Itu getInstance() metode dari KeyStore kelas dari java.security paket menerima nilai string yang mewakili jenis keystore dan mengembalikan objek KeyStore.
Buat objek dari kelas KeyStore menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
Langkah 2: Muat objek KeyStore
Itu load() metode kelas KeyStore menerima a FileInputStream objek yang mewakili file keystore dan parameter String yang menentukan sandi KeyStore.
Secara umum, KeyStore disimpan dalam file bernama cacerts, di lokasi C:/Program Files/Java/jre1.8.0_101/lib/security/ dan kata sandi defaultnya adalah changeit, muat menggunakan load() metode seperti yang ditunjukkan di bawah ini.
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
Langkah 3: Buat objek KeyStore.ProtectionParameter
Buat instance KeyStore.ProtectionParameter seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Langkah 4: Buat objek SecretKey
Buat SecretKey (interface) dengan membuat instance kelas Sub-nya SecretKeySpec. Saat membuat instance, Anda perlu meneruskan kata sandi dan algoritma sebagai parameter ke konstruktornya seperti yang ditunjukkan di bawah ini.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Langkah 5: Buat objek SecretKeyEntry
Buat objek dari SecretKeyEntry kelas dengan melewati SecretKey objek yang dibuat pada langkah di atas seperti yang ditunjukkan di bawah ini.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
Langkah 6: Setel entri ke KeyStore
Itu setEntry() metode dari KeyStore kelas menerima parameter String yang mewakili alias entri keystore, a SecretKeyEntry object, sebuah object ProtectionParameter dan, menyimpan entri di bawah alias yang diberikan.
Setel entri ke keystore menggunakan setEntry() metode seperti yang ditunjukkan di bawah ini.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Langkah 7: Buat objek KeyStore.SecretKeyEntry
Itu getEntry() metode kelas KeyStore menerima alias (parameter String) dan, objek dari kelas ProtectionParameter sebagai parameter dan mengembalikan KeyStoreEntry objek maka Anda dapat memasukkannya ke dalamnya KeyStore.SecretKeyEntry obyek.
Buat objek kelas KeyStore.SecretKeyEntry dengan meneruskan alias untuk kunci yang diperlukan dan objek parameter perlindungan yang dibuat di langkah sebelumnya, ke getEntry() metode seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Langkah 8: Buat objek kunci dari entri yang diambil
Itu getSecretKey() metode dari SecretKeyEntrykelas mengembalikan objek SecretKey. Menggunakan metode ini buat objek SecretKey seperti yang ditunjukkan di bawah ini.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Contoh
Contoh berikut menunjukkan cara mengambil kunci dari penyimpanan kunci. Di sini, kami menyimpan kunci di keystore, yang ada di file "cacerts" (sistem operasi windows 10), mengambilnya, dan menampilkan beberapa propertinya seperti algoritme yang digunakan untuk menghasilkan kunci dan, format kunci yang diambil.
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.KeyStore.ProtectionParameter;
import java.security.KeyStore.SecretKeyEntry;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class RetrievingFromKeyStore{
public static void main(String args[]) throws Exception{
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the the KeyStore object
char[] password = "changeit".toCharArray();
java.io.FileInputStream fis = new FileInputStream(
"C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts");
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
SecretKeyEntry secretKeyEntry = new SecretKeyEntry(mySecretKey);
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
//Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, password);
//Creating the KeyStore.SecretKeyEntry object
SecretKeyEntry secretKeyEnt = (SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println("Algorithm used to generate key : "+mysecretKey.getAlgorithm());
System.out.println("Format used for the key: "+mysecretKey.getFormat());
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Algorithm used to generate key: DSA
Format of the key: RAW
Java menyediakan KeyGenerator kelas kelas ini digunakan untuk menghasilkan kunci rahasia dan objek kelas ini dapat digunakan kembali.
Untuk menghasilkan kunci menggunakan kelas KeyGenerator ikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyGenerator
Itu KeyGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyGenerator yang menghasilkan kunci rahasia.
Membuat KeyGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
Langkah 2: Buat objek SecureRandom
Itu SecureRandom kelas dari java.Securitypaket menyediakan generator nomor acak yang kuat yang digunakan untuk menghasilkan nomor acak di Jawa. Instantiate kelas ini seperti yang ditunjukkan di bawah ini.
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
Langkah 3: Inisialisasi KeyGenerator
Itu KeyGenerator kelas menyediakan metode bernama init() metode ini menerima objek SecureRandom dan menginisialisasi arus KeyGenerator.
Inisialisasi objek KeyGenerator yang dibuat pada langkah sebelumnya menggunakan init() metode.
//Initializing the KeyGenerator
keyGen.init(secRandom);
Contoh
Contoh berikut menunjukkan pembuatan kunci dari kunci rahasia menggunakan kelas KeyGenerator dari javax.crypto paket.
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.SecureRandom;
public class KeyGeneratorExample {
public static void main(String args[]) throws Exception{
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
//Initializing the KeyGenerator
keyGen.init(secRandom);
//Creating/Generating a key
Key key = keyGen.generateKey();
System.out.println(key);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(cipher.ENCRYPT_MODE, key);
String msg = new String("Hi how are you");
byte[] bytes = cipher.doFinal(msg.getBytes());
System.out.println(bytes);
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
com.sun.crypto.provider.DESKey@18629
[B@2ac1fdc4
Java menyediakan KeyPairGeneratorkelas. Kelas ini digunakan untuk menghasilkan pasangan kunci publik dan pribadi. Untuk menghasilkan kunci menggunakanKeyPairGenerator kelas, ikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyPairGenerator yang menghasilkan kunci.
Membuat KeyPairGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Langkah 2: Inisialisasi objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan metode bernama initialize()metode ini digunakan untuk menginisialisasi generator pasangan kunci. Metode ini menerima nilai integer yang mewakili ukuran kunci.
Inisialisasi objek KeyPairGenerator yang dibuat pada langkah sebelumnya menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
Langkah 3: Buat KeyPairGenerator
Anda dapat menghasilkan KeyPair menggunakan generateKeyPair() metode dari KeyPairGeneratorkelas. Hasilkan pasangan kunci menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
Langkah 4: Dapatkan kunci privat / kunci publik
Anda bisa mendapatkan kunci pribadi dari objek KeyPair yang dihasilkan menggunakan getPrivate() metode seperti yang ditunjukkan di bawah ini.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Anda bisa mendapatkan kunci publik dari objek KeyPair yang dihasilkan menggunakan getPublic() metode seperti yang ditunjukkan di bawah ini.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
Contoh
Contoh berikut menunjukkan pembuatan kunci dari kunci rahasia menggunakan kelas KeyPairGenerator dari javax.crypto paket.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
public class KeyPairGenertor {
public static void main(String args[]) throws Exception{
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
//Generating the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
System.out.println("Keys generated");
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Keys generated
Tanda tangan digital memungkinkan kami untuk memverifikasi penulis, tanggal dan waktu tanda tangan, mengotentikasi isi pesan. Ini juga mencakup fungsi otentikasi untuk kemampuan tambahan.
Keuntungan dari tanda tangan digital
Pada bagian ini, kita akan belajar tentang berbagai alasan yang menyerukan penggunaan tanda tangan digital. Ada beberapa alasan untuk menerapkan tanda tangan digital pada komunikasi -
Autentikasi
Tanda tangan digital membantu mengotentikasi sumber pesan. Misalnya, jika kantor cabang bank mengirim pesan ke kantor pusat, meminta perubahan saldo rekening. Jika kantor pusat tidak dapat mengotentikasi pesan yang dikirim dari sumber yang berwenang, tindakan atas permintaan tersebut bisa menjadi kesalahan besar.
Integritas
Setelah pesan ditandatangani, setiap perubahan dalam pesan akan membuat tanda tangan tidak valid.
Non-repudiation
Dengan properti ini, setiap entitas yang telah menandatangani beberapa informasi tidak dapat menyangkal di lain waktu telah menandatanganinya.
Membuat tanda tangan digital
Sekarang mari kita belajar cara membuat tanda tangan digital. Anda dapat membuat tanda tangan digital menggunakan Java dengan mengikuti langkah-langkah di bawah ini.
Langkah 1: Buat objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyPairGenerator yang menghasilkan kunci.
Membuat KeyPairGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Langkah 2: Inisialisasi objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan metode bernama initialize()metode ini digunakan untuk menginisialisasi generator pasangan kunci. Metode ini menerima nilai integer yang mewakili ukuran kunci.
Inisialisasi objek KeyPairGenerator yang dibuat pada langkah sebelumnya menggunakan initialize() metode seperti yang ditunjukkan di bawah ini.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
Langkah 3: Buat KeyPairGenerator
Anda dapat menghasilkan KeyPair menggunakan generateKeyPair()metode. Hasilkan pasangan kunci menggunakangenerateKeyPair() metode seperti yang ditunjukkan di bawah ini.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
Langkah 4: Dapatkan kunci pribadi dari pasangan
Anda bisa mendapatkan kunci pribadi dari objek KeyPair yang dihasilkan menggunakan getPrivate() metode.
Dapatkan kunci pribadi menggunakan getPrivate() metode seperti yang ditunjukkan di bawah ini.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Langkah 5: Buat objek tanda tangan
Itu getInstance() metode dari Signature kelas menerima parameter string yang mewakili algoritme tanda tangan yang diperlukan dan mengembalikan objek Tanda Tangan masing-masing.
Buat objek dari kelas Signature menggunakan getInstance() metode.
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
Langkah 6: Inisialisasi objek Signature
Itu initSign() metode kelas Signature menerima a PrivateKey objek dan menginisialisasi objek Signature saat ini.
Inisialisasi objek Signature yang dibuat pada langkah sebelumnya menggunakan initSign() metode seperti yang ditunjukkan di bawah ini.
//Initialize the signature
sign.initSign(privKey);
Langkah 7: Tambahkan data ke objek Tanda Tangan
Itu update() metode kelas Signature menerima array byte yang mewakili data yang akan ditandatangani atau diverifikasi dan memperbarui objek saat ini dengan data yang diberikan.
Perbarui objek Signature yang diinisialisasi dengan meneruskan data yang akan ditandatangani ke update() metode dalam bentuk array byte seperti yang ditunjukkan di bawah ini.
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
Langkah 8: Hitung Tanda Tangannya
Itu sign() metode dari Signature kelas mengembalikan byte tanda tangan dari data yang diperbarui.
Hitung Tanda Tangan menggunakan sign() metode seperti yang ditunjukkan di bawah ini.
//Calculating the signature
byte[] signature = sign.sign();
Example
Mengikuti program Java menerima pesan dari pengguna dan menghasilkan tanda tangan digital untuk pesan yang diberikan.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Scanner;
public class CreatingDigitalSignature {
public static void main(String args[]) throws Exception {
//Accepting text from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter some text");
String msg = sc.nextLine();
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
//Initialize the signature
sign.initSign(privKey);
byte[] bytes = "msg".getBytes();
//Adding data to the signature
sign.update(bytes);
//Calculating the signature
byte[] signature = sign.sign();
//Printing the signature
System.out.println("Digital signature for given text: "+new String(signature, "UTF8"));
}
}
Output
Program di atas menghasilkan keluaran berikut -
Enter some text
Hi how are you
Digital signature for given text: 0=@gRD???-?.???? /yGL?i??a!?
Anda dapat membuat tanda tangan digital menggunakan Java dan memverifikasinya dengan mengikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyPairGenerator yang menghasilkan kunci.
Membuat KeyPairGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Langkah 2: Inisialisasi objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan metode bernama initialize()metode. Metode ini digunakan untuk menginisialisasi generator pasangan kunci. Metode ini menerima nilai integer yang mewakili ukuran kunci.
Inisialisasi objek KeyPairGenerator yang dibuat pada langkah sebelumnya menggunakan initialize() metode seperti yang ditunjukkan di bawah ini.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
Langkah 3: Buat KeyPairGenerator
Anda dapat menghasilkan KeyPair menggunakan generateKeyPair()metode. Hasilkan keypair menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
Langkah 4: Dapatkan kunci pribadi dari pasangan
Anda bisa mendapatkan kunci pribadi dari objek KeyPair yang dihasilkan menggunakan getPrivate() metode.
Dapatkan kunci pribadi menggunakan getPrivate() metode seperti yang ditunjukkan di bawah ini.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Langkah 5: Buat objek tanda tangan
Itu getInstance() metode dari Signature kelas menerima parameter string yang mewakili algoritme tanda tangan yang diperlukan dan mengembalikan objek Tanda Tangan masing-masing.
Buat objek dari kelas Signature menggunakan getInstance() metode.
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
Langkah 6: Inisialisasi objek Signature
Itu initSign() metode kelas Signature menerima a PrivateKey objek dan menginisialisasi objek Signature saat ini.
Inisialisasi objek Signature yang dibuat pada langkah sebelumnya menggunakan initSign() metode seperti yang ditunjukkan di bawah ini.
//Initialize the signature
sign.initSign(privKey);
Langkah 7: Tambahkan data ke objek Tanda Tangan
Itu update() metode kelas Signature menerima array byte yang mewakili data yang akan ditandatangani atau diverifikasi dan memperbarui objek saat ini dengan data yang diberikan.
Perbarui objek Signature yang diinisialisasi dengan meneruskan data yang akan ditandatangani ke update() metode dalam bentuk array byte seperti yang ditunjukkan di bawah ini.
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
Langkah 8: Hitung Tanda Tangannya
Itu sign() metode dari Signature kelas mengembalikan byte tanda tangan dari data yang diperbarui.
Hitung Signature menggunakan metode sign () seperti yang ditunjukkan di bawah ini.
//Calculating the signature
byte[] signature = sign.sign();
Langkah 9: Inisialisasi objek tanda tangan untuk verifikasi
Untuk memverifikasi objek Signature, Anda perlu menginisialisasinya terlebih dahulu menggunakan initVerify() metode itu metode menerima a PublicKey obyek.
Oleh karena itu, inisialisasi objek Signature untuk verifikasi menggunakan initVerify() metode seperti yang ditunjukkan di bawah ini.
//Initializing the signature
sign.initVerify(pair.getPublic());
Langkah 10: Perbarui data untuk diverifikasi
Perbarui objek yang diinisialisasi (untuk verifikasi) dengan data data yang akan diverifikasi menggunakan metode pembaruan seperti yang ditunjukkan di bawah ini.
//Update the data to be verified
sign.update(bytes);
Langkah 11: Verifikasi Tanda Tangan
Itu verify()metode kelas Signature menerima objek tanda tangan lain dan memverifikasinya dengan yang sekarang. Jika kecocokan terjadi, itu mengembalikan benar jika tidak mengembalikan salah.
Verifikasi tanda tangan menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Verify the signature
boolean bool = sign.verify(signature);
Contoh
Mengikuti program Java menerima pesan dari pengguna, menghasilkan tanda tangan digital untuk pesan yang diberikan, dan memverifikasinya.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Scanner;
public class SignatureVerification {
public static void main(String args[]) throws Exception{
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the privatekey from the key pair
PrivateKey privKey = pair.getPrivate();
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
//Initializing the signature
sign.initSign(privKey);
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
//Calculating the signature
byte[] signature = sign.sign();
//Initializing the signature
sign.initVerify(pair.getPublic());
sign.update(bytes);
//Verifying the signature
boolean bool = sign.verify(signature);
if(bool) {
System.out.println("Signature verified");
} else {
System.out.println("Signature failed");
}
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Signature verified
Anda dapat mengenkripsi data yang diberikan menggunakan kelas Cipher dari javax.cryptopaket. Ikuti langkah-langkah yang diberikan di bawah ini untuk mengenkripsi data yang diberikan menggunakan Java.
Langkah 1: Buat objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyPairGenerator yang menghasilkan kunci.
Membuat KeyPairGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Langkah 2: Inisialisasi objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan metode bernama initialize()metode ini digunakan untuk menginisialisasi generator pasangan kunci. Metode ini menerima nilai integer yang mewakili ukuran kunci.
Inisialisasi objek KeyPairGenerator yang dibuat pada langkah sebelumnya menggunakan initialize() metode seperti yang ditunjukkan di bawah ini.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
Langkah 3: Buat KeyPairGenerator
Anda dapat menghasilkan KeyPair menggunakan generateKeyPair() metode dari KeyPairGeneratorkelas. Hasilkan pasangan kunci menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
Langkah 4: Dapatkan kunci publik
Anda bisa mendapatkan kunci publik dari file KeyPair objek menggunakan getPublic() metode seperti yang ditunjukkan di bawah ini.
Dapatkan kunci publik menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
Langkah 5: Buat objek Cipher
Itu getInstance() metode dari Cipher kelas menerima variabel String yang mewakili transformasi yang diperlukan dan mengembalikan objek Cipher yang mengimplementasikan transformasi yang diberikan.
Buat objek Cipher menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Langkah 6: Inisialisasi objek Cipher
Itu init() metode dari Cipher class menerima dua parameter, sebuah parameter integer yang mewakili mode operasi (encrypt / decrypt) dan, sebuah objek Key yang mewakili kunci publik.
Inisialisasi objek Cypher menggunakan init() metode seperti yang ditunjukkan di bawah ini.
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
Langkah 7: Tambahkan data ke objek Cipher
Itu update() metode kelas Cipher menerima array byte yang mewakili data yang akan dienkripsi dan memperbarui objek saat ini dengan data yang diberikan.
Perbarui objek Cipher yang diinisialisasi dengan meneruskan data ke update() metode dalam bentuk array byte seperti yang ditunjukkan di bawah ini.
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
Langkah 8: Enkripsi data
Itu doFinal()metode kelas Cipher menyelesaikan operasi enkripsi. Oleh karena itu, selesaikan enkripsi menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Encrypting the data
byte[] cipherText = cipher.doFinal();
Contoh
Mengikuti program Java menerima teks dari pengguna, mengenkripsinya menggunakan algoritma RSA dan, mencetak format terenkripsi dari teks yang diberikan.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
public class CipherSample {
public static void main(String args[]) throws Exception{
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withRSA");
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generating the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic());
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
//encrypting the data
byte[] cipherText = cipher.doFinal();
System.out.println(new String(cipherText, "UTF8"));
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Encrypted Text:
"???:]J_?]???;Xl??????*@??u???r??=T&???_?_??.??i?????(?$_f?zD??????ZGH??g??? g?E:_??bz^??f?~o???t?}??u=uzp\UI????Z??l[?G?3??Y?UAEfKT?f?O??N_?d__?????a_?15%?^? 'p?_?$,9"{??^??y??_?t???,?W?PCW??~??[?$??????e????f?Y-Zi__??_??w?_?&QT??`?`~?[?K_??_???
Anda dapat mendekripsi data terenkripsi menggunakan kelas Cipher dari javax.cryptopaket. Ikuti langkah-langkah yang diberikan di bawah ini untuk mendekripsi data yang diberikan menggunakan Java.
Langkah 1: Buat objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan getInstance() metode yang menerima variabel String yang mewakili algoritme penghasil kunci yang diperlukan dan mengembalikan objek KeyPairGenerator yang menghasilkan kunci.
Membuat KeyPairGenerator objek menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Langkah 2: Inisialisasi objek KeyPairGenerator
Itu KeyPairGenerator kelas menyediakan metode bernama initialize()metode ini digunakan untuk menginisialisasi generator pasangan kunci. Metode ini menerima nilai integer yang mewakili ukuran kunci.
Inisialisasi objek KeyPairGenerator yang dibuat pada langkah sebelumnya menggunakan initialize() metode seperti yang ditunjukkan di bawah ini.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
Langkah 3: Buat KeyPairGenerator
Anda dapat menghasilkan KeyPair menggunakan generateKeyPair() metode dari KeyPairGeneratorkelas. Hasilkan pasangan kunci menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
Langkah 4: Dapatkan kunci publik
Anda bisa mendapatkan kunci publik dari objek KeyPair yang dihasilkan menggunakan getPublic() metode seperti yang ditunjukkan di bawah ini.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
Langkah 5: Buat objek Cipher
Itu getInstance() metode dari Cipher kelas menerima variabel String yang mewakili transformasi yang diperlukan dan mengembalikan objek Cipher yang mengimplementasikan transformasi yang diberikan.
Buat objek Cipher menggunakan getInstance() metode seperti yang ditunjukkan di bawah ini.
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Langkah 6: Inisialisasi objek Cipher
Itu init() metode kelas Cipher menerima dua parameter
- Parameter integer yang mewakili mode operasi (enkripsi / dekripsi)
- Objek kunci yang mewakili kunci publik
Inisialisasi objek Cypher menggunakan init() metode seperti yang ditunjukkan di bawah ini.
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
Langkah 7: Tambahkan data ke objek Cipher
Itu update() metode kelas Cipher menerima array byte yang mewakili data yang akan dienkripsi dan memperbarui objek saat ini dengan data yang diberikan.
Perbarui objek Cipher yang diinisialisasi dengan meneruskan data ke update() metode dalam bentuk array byte seperti yang ditunjukkan di bawah ini.
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
Langkah 8: Enkripsi data
Itu doFinal()metode kelas Cipher menyelesaikan operasi enkripsi. Oleh karena itu, selesaikan enkripsi menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Encrypting the data
byte[] cipherText = cipher.doFinal();
Langkah 9: Inisialisasi objek Cipher untuk dekripsi
Untuk mendekripsi cypher yang dienkripsi pada langkah sebelumnya, Anda perlu menginisialisasi untuk dekripsi.
Oleh karena itu, inisialisasi objek cipher dengan meneruskan parameter Cipher.DECRYPT_MODE dan objek PrivateKey seperti yang ditunjukkan di bawah ini.
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
Langkah 10: Dekripsi data
Terakhir, Dekripsi teks terenkripsi menggunakan doFinal() metode seperti yang ditunjukkan di bawah ini.
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
Contoh
Mengikuti program Java menerima teks dari pengguna, mengenkripsinya menggunakan algoritma RSA dan, mencetak sandi dari teks yang diberikan, mendekripsi sandi dan mencetak teks yang didekripsi lagi.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.Cipher;
public class CipherDecrypt {
public static void main(String args[]) throws Exception{
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withRSA");
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//Add data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
//encrypting the data
byte[] cipherText = cipher.doFinal();
System.out.println( new String(cipherText, "UTF8"));
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
System.out.println(new String(decipheredText));
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Encrypted Text:
]/[?F3?D?p
v?w?!?H???^?A??????P?u??FA?
?
???_?? ???_jMH-??>??OP?'?j?_?n`
?_??'`????o??_GL??g???g_f?????f|???LT?|?Vz_TDu#??\?<b,,?$C2???Bq?#?lDB`??g,^??K?_?v???`}
?;LX?a?_5e???#???_?6?/B&B_???^?__Ap^#_?q?IEh????_?,??*??]~_?_?D?
_y???lp??a?P_U{
Decrypted Text:
Welcome to Tutorialspoint