자바 암호화-서명 생성
디지털 서명을 사용하면 작성자, 서명 날짜 및 시간을 확인하고 메시지 내용을 인증 할 수 있습니다. 추가 기능을위한 인증 기능도 포함되어 있습니다.
디지털 서명의 장점
이 섹션에서는 디지털 서명을 사용해야하는 여러 가지 이유에 대해 알아 봅니다. 통신에 디지털 서명을 구현하는 데는 몇 가지 이유가 있습니다.
입증
디지털 서명은 메시지 소스를 인증하는 데 도움이됩니다. 예를 들어 은행 지점이 중앙 사무실에 계정 잔액 변경을 요청하는 메시지를 보내는 경우입니다. 인증 된 소스에서 보낸 메시지를 중앙 사무실에서 인증 할 수없는 경우 이러한 요청을 수행하는 것은 심각한 실수가 될 수 있습니다.
청렴
메시지에 서명 한 후 메시지를 변경하면 서명이 무효화됩니다.
부인 방지
이 속성에 따라 일부 정보에 서명 한 법인은 나중에 서명을 거부 할 수 없습니다.
디지털 서명 생성
이제 디지털 서명을 만드는 방법을 알아 보겠습니다. 아래 단계에 따라 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!?