Kriptografi Java - Mendekripsi Data
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 menginisialisasinya 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