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