การเข้ารหัส Java - การสร้างลายเซ็น
ลายเซ็นดิจิทัลช่วยให้เราสามารถตรวจสอบผู้แต่งวันที่และเวลาของลายเซ็นรับรองความถูกต้องของเนื้อหาข้อความ นอกจากนี้ยังมีฟังก์ชันการพิสูจน์ตัวตนสำหรับความสามารถเพิ่มเติม
ข้อดีของลายเซ็นดิจิทัล
ในส่วนนี้เราจะเรียนรู้เกี่ยวกับสาเหตุต่างๆที่เรียกร้องให้ใช้ลายเซ็นดิจิทัล มีเหตุผลหลายประการในการนำลายเซ็นดิจิทัลไปใช้ในการสื่อสาร -
การรับรองความถูกต้อง
ลายเซ็นดิจิทัลช่วยในการตรวจสอบแหล่งที่มาของข้อความ ตัวอย่างเช่นหากสำนักงานสาขาของธนาคารส่งข้อความไปยังสำนักงานกลางเพื่อขอเปลี่ยนแปลงยอดเงินในบัญชี หากสำนักงานกลางไม่สามารถรับรองความถูกต้องว่าข้อความนั้นส่งมาจากแหล่งที่ได้รับอนุญาตการดำเนินการตามคำขอดังกล่าวอาจเป็นความผิดพลาดอย่างร้ายแรง
ความซื่อสัตย์
เมื่อลงนามข้อความแล้วการเปลี่ยนแปลงใด ๆ ในข้อความจะทำให้ลายเซ็นเป็นโมฆะ
การไม่ปฏิเสธ
โดยคุณสมบัตินี้หน่วยงานใด ๆ ที่ลงนามในข้อมูลบางอย่างจะไม่สามารถปฏิเสธการลงนามได้ในภายหลัง
การสร้างลายเซ็นดิจิทัล
ตอนนี้ให้เราเรียนรู้วิธีสร้างลายเซ็นดิจิทัล คุณสามารถสร้างลายเซ็นดิจิทัลโดยใช้ Java ตามขั้นตอนที่ระบุด้านล่าง
ขั้นตอนที่ 1: สร้างวัตถุ KeyPairGenerator
KeyPairGenerator คลาสให้ getInstance() วิธีการที่ยอมรับตัวแปร String ที่แสดงอัลกอริทึมการสร้างคีย์ที่ต้องการและส่งคืนอ็อบเจ็กต์ KeyPairGenerator ที่สร้างคีย์
สร้าง KeyPairGenerator วัตถุโดยใช้ getInstance() วิธีการดังแสดงด้านล่าง
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
ขั้นตอนที่ 2: เริ่มต้นวัตถุ KeyPairGenerator
KeyPairGenerator คลาสจัดเตรียมเมธอดชื่อ initialize()วิธีนี้ใช้เพื่อเริ่มต้นตัวสร้างคู่คีย์ วิธีนี้ยอมรับค่าจำนวนเต็มแทนขนาดคีย์
เริ่มต้นวัตถุ KeyPairGenerator ที่สร้างขึ้นในขั้นตอนก่อนหน้าโดยใช้ไฟล์ initialize() วิธีการดังแสดงด้านล่าง
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
ขั้นตอนที่ 3: สร้าง KeyPairGenerator
คุณสามารถสร้างไฟล์ KeyPair ใช้ generateKeyPair()วิธี. สร้างคู่คีย์โดยใช้generateKeyPair() วิธีการดังแสดงด้านล่าง
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
ขั้นตอนที่ 4: รับคีย์ส่วนตัวจากคู่
คุณสามารถรับคีย์ส่วนตัวจากวัตถุ KeyPair ที่สร้างขึ้นโดยใช้ไฟล์ getPrivate() วิธี.
รับคีย์ส่วนตัวโดยใช้ getPrivate() วิธีการดังแสดงด้านล่าง
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
ขั้นตอนที่ 5: สร้างวัตถุลายเซ็น
getInstance() วิธีการของ Signature คลาสยอมรับพารามิเตอร์สตริงที่แสดงอัลกอริธึมลายเซ็นที่ต้องการและส่งคืนอ็อบเจ็กต์ Signature ตามลำดับ
สร้างออบเจ็กต์ของคลาส Signature โดยใช้ getInstance() วิธี.
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
ขั้นตอนที่ 6: เริ่มต้นวัตถุลายเซ็น
initSign() วิธีการของคลาส Signature ยอมรับไฟล์ PrivateKey วัตถุและเริ่มต้นวัตถุลายเซ็นปัจจุบัน
เริ่มต้นอ็อบเจ็กต์ Signature ที่สร้างขึ้นในขั้นตอนก่อนหน้าโดยใช้ initSign() วิธีการดังแสดงด้านล่าง
//Initialize the signature
sign.initSign(privKey);
ขั้นตอนที่ 7: เพิ่มข้อมูลลงในวัตถุลายเซ็น
update() วิธีการของคลาส Signature ยอมรับอาร์เรย์ไบต์ที่แสดงข้อมูลที่จะเซ็นหรือตรวจสอบและอัพเดตอ็อบเจ็กต์ปัจจุบันด้วยข้อมูลที่กำหนด
อัปเดตอ็อบเจ็กต์ลายเซ็นเริ่มต้นโดยส่งข้อมูลที่จะเซ็นชื่อไปยังไฟล์ update() วิธีการในรูปแบบของไบต์อาร์เรย์ดังที่แสดงด้านล่าง
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
ขั้นตอนที่ 8: คำนวณลายเซ็น
sign() วิธีการของ Signature คลาสส่งคืนไบต์ลายเซ็นของข้อมูลที่อัพเดต
คำนวณลายเซ็นโดยใช้ sign() วิธีการดังแสดงด้านล่าง
//Calculating the signature
byte[] signature = sign.sign();
Example
ต่อไปนี้โปรแกรม Java ยอมรับข้อความจากผู้ใช้และสร้างลายเซ็นดิจิทัลสำหรับข้อความที่กำหนด
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
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -
Enter some text
Hi how are you
Digital signature for given text: 0=@gRD???-?.???? /yGL?i??a!?