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