การเข้ารหัส 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!?