자바 암호화-서명 생성

디지털 서명을 사용하면 작성자, 서명 날짜 및 시간을 확인하고 메시지 내용을 인증 할 수 있습니다. 추가 기능을위한 인증 기능도 포함되어 있습니다.

디지털 서명의 장점

이 섹션에서는 디지털 서명을 사용해야하는 여러 가지 이유에 대해 알아 봅니다. 통신에 디지털 서명을 구현하는 데는 몇 가지 이유가 있습니다.

입증

디지털 서명은 메시지 소스를 인증하는 데 도움이됩니다. 예를 들어 은행 지점이 중앙 사무실에 계정 잔액 변경을 요청하는 메시지를 보내는 경우입니다. 인증 된 소스에서 보낸 메시지를 중앙 사무실에서 인증 할 수없는 경우 이러한 요청을 수행하는 것은 심각한 실수가 될 수 있습니다.

청렴

메시지에 서명 한 후 메시지를 변경하면 서명이 무효화됩니다.

부인 방지

이 속성에 따라 일부 정보에 서명 한 법인은 나중에 서명을 거부 할 수 없습니다.

디지털 서명 생성

이제 디지털 서명을 만드는 방법을 알아 보겠습니다. 아래 단계에 따라 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 클래스의 메소드는 서명 또는 검증 할 데이터를 나타내는 바이트 배열을 받아들이고 주어진 데이터로 현재 객체를 업데이트합니다.

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