Java暗号化-キーの取得

この章では、Java暗号化を使用してキーストアからキーを取得する方法を学習します。

キーストアからキーを取得するには、以下の手順に従います。

手順1:KeyStoreオブジェクトを作成する

ザ・ getInstance() の方法 KeyStore のクラス java.security パッケージは、キーストアのタイプを表す文字列値を受け入れ、KeyStoreオブジェクトを返します。

以下に示すように、このメソッドを使用してKeyStoreクラスのオブジェクトを作成します。

//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");

ステップ2:KeyStoreオブジェクトをロードします

ザ・ load() KeyStoreクラスのメソッドは FileInputStream キーストアファイルを表すオブジェクトと、キーストアのパスワードを指定するStringパラメータ。

通常、KeyStoreはという名前のファイルに保存されます cacerts、その場所で C:/Program Files/Java/jre1.8.0_101/lib/security/ デフォルトのパスワードは changeit、を使用してロードします load() 以下に示す方法。

//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);

手順3:KeyStore.ProtectionParameterオブジェクトを作成する

以下に示すように、KeyStore.ProtectionParameterをインスタンス化します。

//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);

ステップ4:SecretKeyオブジェクトを作成する

を作成します SecretKey (インターフェイス)オブジェクトのサブクラスをインスタンス化する SecretKeySpec。インスタンス化中に、以下に示すように、パスワードとアルゴリズムをパラメーターとしてコンストラクターに渡す必要があります。

//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");

手順5:SecretKeyEntryオブジェクトを作成する

のオブジェクトを作成します SecretKeyEntry を渡すことによってクラス SecretKey 以下に示すように、上記の手順で作成されたオブジェクト。

//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);

手順6:キーストアへのエントリを設定します

ザ・ setEntry() の方法 KeyStore クラスは、キーストアエントリエイリアスを表すStringパラメータを受け入れます。 SecretKeyEntry オブジェクト、ProtectionParameterオブジェクト、およびは、指定されたエイリアスの下にエントリを格納します。

を使用してエントリをキーストアに設定します setEntry() 以下に示す方法。

//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);

手順7:KeyStore.SecretKeyEntryオブジェクトを作成します

ザ・ getEntry() KeyStoreクラスのメソッドはエイリアス(Stringパラメーター)を受け入れ、ProtectionParameterクラスのオブジェクトをパラメーターとして受け取り、 KeyStoreEntry オブジェクトなら、これをキャストできます KeyStore.SecretKeyEntry オブジェクト。

必要なキーのエイリアスと前の手順で作成した保護パラメータオブジェクトをに渡して、KeyStore.SecretKeyEntryクラスのオブジェクトを作成します。 getEntry() 以下に示す方法。

//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);

手順8:取得したエントリのキーオブジェクトを作成する

ザ・ getSecretKey() の方法 SecretKeyEntryクラスはSecretKeyオブジェクトを返します。このメソッドを使用して、以下に示すようにSecretKeyオブジェクトを作成します。

//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();      
System.out.println(mysecretKey);

次の例は、キーストアからキーを取得する方法を示しています。ここでは、「cacerts」ファイル(Windows 10オペレーティングシステム)にあるキーストアにキーを格納し、それを取得して、キーの生成に使用されるアルゴリズムや、次の形式など、キーのプロパティの一部を表示します。取得したキー。

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.KeyStore.ProtectionParameter;
import java.security.KeyStore.SecretKeyEntry;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class RetrievingFromKeyStore{
   public static void main(String args[]) throws Exception{
      //Creating the KeyStore object
      KeyStore keyStore = KeyStore.getInstance("JCEKS");

      //Loading the the KeyStore object
      char[] password = "changeit".toCharArray();
      java.io.FileInputStream fis = new FileInputStream(
         "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts");
      
      keyStore.load(fis, password);
      
      //Creating the KeyStore.ProtectionParameter object
      ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);

      //Creating SecretKey object
      SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
      
      //Creating SecretKeyEntry object
      SecretKeyEntry secretKeyEntry = new SecretKeyEntry(mySecretKey);
      keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);

      //Storing the KeyStore object
      java.io.FileOutputStream fos = null;
      fos = new java.io.FileOutputStream("newKeyStoreName");
      keyStore.store(fos, password);
      
      //Creating the KeyStore.SecretKeyEntry object
      SecretKeyEntry secretKeyEnt = (SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);

      //Creating SecretKey object
      SecretKey mysecretKey = secretKeyEnt.getSecretKey();      
      System.out.println("Algorithm used to generate key : "+mysecretKey.getAlgorithm());   
      System.out.println("Format used for the key: "+mysecretKey.getFormat());
   }
}

出力

上記のプログラムは次の出力を生成します-

Algorithm used to generate key: DSA
Format of the key: RAW