자바 암호화-서명 확인

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 클래스의 메소드는 서명 또는 검증 할 데이터를 나타내는 바이트 배열을 받아들이고 주어진 데이터로 현재 객체를 업데이트합니다.

서명 할 데이터를 전달하여 초기화 된 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();

9 단계 : 확인을 위해 서명 개체 초기화

서명 개체를 확인하려면 먼저 다음을 사용하여 초기화해야합니다. initVerify() 방법 it 메서드는 PublicKey 목적.

따라서 확인을 위해 Signature 객체를 초기화하십시오. initVerify() 방법은 아래와 같습니다.

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

10 단계 : 확인할 데이터 업데이트

초기화 된 (검증 용) 객체를 아래와 같이 업데이트 방법을 사용하여 검증 할 데이터로 업데이트합니다.

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

11 단계 : 서명 확인

그만큼 verify()Signature 클래스의 메소드는 다른 서명 객체를 받아 현재 객체로 확인합니다. 일치가 발생하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

아래와 같이이 방법을 사용하여 서명을 확인하십시오.

//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