การเข้ารหัส 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()วิธี. สร้างคู่กุญแจโดยใช้วิธีนี้ดังที่แสดงด้านล่าง

//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 คลาสส่งคืนไบต์ลายเซ็นของข้อมูลที่อัพเดต

คำนวณลายเซ็นโดยใช้วิธีการเข้าสู่ระบบ () ดังที่แสดงด้านล่าง

//Calculating the signature
byte[] signature = sign.sign();

ขั้นตอนที่ 9: เริ่มต้นวัตถุลายเซ็นสำหรับการตรวจสอบ

ในการตรวจสอบวัตถุ Signature คุณต้องเริ่มต้นก่อนโดยใช้ไฟล์ initVerify() วิธีการมันยอมรับ a PublicKey วัตถุ.

ดังนั้นเริ่มต้นวัตถุลายเซ็นสำหรับการตรวจสอบโดยใช้ initVerify() วิธีการดังแสดงด้านล่าง

//Initializing the signature
sign.initVerify(pair.getPublic());

ขั้นตอนที่ 10: อัปเดตข้อมูลที่จะยืนยัน

อัปเดตออบเจ็กต์เริ่มต้น (สำหรับการตรวจสอบ) ด้วยข้อมูลที่จะตรวจสอบโดยใช้วิธีการอัปเดตดังที่แสดงด้านล่าง

//Update the data to be verified
sign.update(bytes);

ขั้นตอนที่ 11: ตรวจสอบลายเซ็น

verify()วิธีการของคลาส Signature ยอมรับอ็อบเจ็กต์ลายเซ็นอื่นและยืนยันด้วยอ็อบเจ็กต์ปัจจุบัน หากการจับคู่เกิดขึ้นจะส่งคืนจริงมิฉะนั้นจะคืนค่าเป็นเท็จ

ตรวจสอบลายเซ็นโดยใช้วิธีนี้ตามที่แสดงด้านล่าง

//Verify the signature
boolean bool = sign.verify(signature);

ตัวอย่าง

ต่อไปนี้โปรแกรม Java ยอมรับข้อความจากผู้ใช้สร้างลายเซ็นดิจิทัลสำหรับข้อความที่กำหนดและตรวจสอบ

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");
      }
   }
}

เอาต์พุต

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -

Signature verified