Kriptografi Java - Membuat Tanda Tangan
Tanda tangan digital memungkinkan kita 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 mempelajari 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 mengautentikasi bahwa pesan tersebut dikirim dari sumber resmi, tindakan atas permintaan tersebut bisa menjadi kesalahan besar.
Integritas
Setelah pesan ditandatangani, setiap perubahan dalam pesan akan membuat tanda tangan menjadi tidak valid.
Non-repudiation
Dengan properti ini, setiap entitas yang telah menandatangani beberapa informasi tidak dapat di lain waktu menyangkal 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 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 Signature
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!?