Kryptografia Java - weryfikacja podpisu

Możesz utworzyć podpis cyfrowy za pomocą Java i zweryfikować go, postępując zgodnie z instrukcjami podanymi poniżej.

Krok 1: Utwórz obiekt KeyPairGenerator

Plik KeyPairGenerator klasa zapewnia getInstance() , która akceptuje zmienną String reprezentującą wymagany algorytm generowania kluczy i zwraca obiekt KeyPairGenerator, który generuje klucze.

Stwórz KeyPairGenerator obiekt za pomocą getInstance() metoda, jak pokazano poniżej.

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

Krok 2: Zainicjuj obiekt KeyPairGenerator

Plik KeyPairGenerator class udostępnia metodę o nazwie initialize()metoda. Ta metoda służy do inicjalizacji generatora par kluczy. Ta metoda akceptuje wartość całkowitą reprezentującą rozmiar klucza.

Zainicjuj obiekt KeyPairGenerator utworzony w poprzednim kroku przy użyciu initialize() metoda, jak pokazano poniżej.

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

Krok 3: Wygeneruj KeyPairGenerator

Możesz wygenerować plik KeyPair używając generateKeyPair()metoda. Wygeneruj parę kluczy za pomocą tej metody, jak pokazano poniżej.

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

Krok 4: Uzyskaj klucz prywatny z pary

Możesz uzyskać klucz prywatny z wygenerowanego obiektu KeyPair przy użyciu getPrivate() metoda.

Uzyskaj klucz prywatny za pomocą getPrivate() metoda, jak pokazano poniżej.

//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();

Krok 5: Utwórz obiekt podpisu

Plik getInstance() metoda Signature class akceptuje parametr ciągu reprezentujący wymagany algorytm podpisu i zwraca odpowiedni obiekt Signature.

Utwórz obiekt klasy Signature przy użyciu rozszerzenia getInstance() metoda.

//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");

Krok 6: Zainicjuj obiekt Signature

Plik initSign() metoda klasy Signature akceptuje plik PrivateKey obiekt i inicjalizuje bieżący obiekt Signature.

Zainicjuj obiekt Signature utworzony w poprzednim kroku przy użyciu initSign() metoda, jak pokazano poniżej.

//Initialize the signature
sign.initSign(privKey);

Krok 7: Dodaj dane do obiektu Signature

Plik update() metoda klasy Signature akceptuje tablicę bajtów reprezentującą dane do podpisania lub weryfikacji i aktualizuje bieżący obiekt podanymi danymi.

Zaktualizuj zainicjowany obiekt Signature, przekazując dane do podpisania do pliku update() metoda w postaci tablicy bajtów, jak pokazano poniżej.

byte[] bytes = "Hello how are you".getBytes();      

//Adding data to the signature
sign.update(bytes);

Krok 8: Oblicz podpis

Plik sign() metoda Signature class zwraca bajty sygnatur zaktualizowanych danych.

Oblicz podpis za pomocą metody sign (), jak pokazano poniżej.

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

Krok 9: Zainicjuj obiekt podpisu do weryfikacji

Aby zweryfikować obiekt Signature, musisz go najpierw zainicjować przy użyciu initVerify() metoda it metoda akceptuje plik PublicKey obiekt.

Dlatego zainicjuj obiekt Signature do weryfikacji przy użyciu initVerify() metoda, jak pokazano poniżej.

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

Krok 10: Zaktualizuj dane do zweryfikowania

Zaktualizuj zainicjowany (do weryfikacji) obiekt danymi, które mają być zweryfikowane przy użyciu metody aktualizacji, jak pokazano poniżej.

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

Krok 11: Zweryfikuj podpis

Plik verify()metoda klasy Signature akceptuje inny obiekt podpisu i weryfikuje go z obecnym. Jeśli wystąpi dopasowanie, zwraca true, w przeciwnym razie zwraca false.

Zweryfikuj podpis za pomocą tej metody, jak pokazano poniżej.

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

Przykład

Poniższy program w języku Java przyjmuje wiadomość od użytkownika, generuje podpis cyfrowy dla danej wiadomości i weryfikuje ją.

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

Wynik

Powyższy program generuje następujące dane wyjściowe -

Signature verified