Java暗号化-署名の検証
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クラスのオブジェクトを作成します 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クラスのメソッドは、署名または検証されるデータを表すバイト配列を受け入れ、指定されたデータで現在のオブジェクトを更新します。
署名するデータをに渡すことにより、初期化された署名オブジェクトを更新します。 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 オブジェクト。
したがって、を使用して検証するために署名オブジェクトを初期化します。 initVerify() 以下に示す方法。
//Initializing the signature
sign.initVerify(pair.getPublic());
ステップ10:検証するデータを更新する
以下に示すように、updateメソッドを使用して検証するデータで初期化(検証用)オブジェクトを更新します。
//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