开发手册 欢迎您!
软件开发者资料库

Java密码学 - 检索密钥

Java密码学检索密钥 - 从基本到高级概念的简单简单步骤学习Java密码学,其中包括简介,消息摘要,创建MAC,密钥,存储,检索密钥,KeyGenerator,KeyPairGenerator,创建,验证签名,加密,解密等示例数据。

在本章中,我们将学习如何使用Java Cryptography从密钥库中检索密钥.

要从密钥库中检索密钥,请按照以下步骤进行操作.

步骤1:创建KeyStore对象

KeyStore 类的 getInstance()方法 java.security 包接受表示密钥库类型的字符串值,并返回KeyStore对象.

使用此方法创建KeyStore类的对象如下所示.

//创建KeyStore对象 KeyStore keyStore = KeyStore.getInstance("JCEKS");

第2步:加载KeyStore对象

load()方法KeyStore类接受表示密钥库文件的 FileInputStream 对象和指定KeyStore密码的String参数.

通常,KeyStore存储在名为的文件中 cacerts ,位于 C:/Program Files/Java/jre1.8.0_101/lib/security/,其默认密码为 changeit ,使用 load()方法加载它,如下所示.

//Loading the KeyStore objectchar[] 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,如下所示.

//创建KeyStore.ProtectionParameter对象 KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);

步骤4:创建一个SecretKey对象

创建 SecretKey (接口)对象通过实例化其Sub类 SecretKeySpec .在实例化时,你需要将密码和算法作为参数传递给它的构造函数,如下所示.

//创建SecretKey对象 SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(),"DSA");

步骤5:创建SecretKeyEntry对象

创建 SecretKeyEntry 类的对象通过传递在上面步骤中创建的 SecretKey 对象,如下所示.

//创建SecretKeyEntry对象 KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);

步骤6:设置KeyStore的条目

setEntry()方法 KeyStore 类接受表示密钥库条目别名的String参数, SecretKeyEntry 对象,ProtectionParameter对象,并将条目存储在给定别名下.

使用 setEntry()方法设置密钥库的条目,如下所示.

//将条目设置为密钥库 keyStore.setEntry("secretKeyAlias",secretKeyEntry,protectionParam);

步骤7:创建KeyStore.SecretKeyEntry对象

getEntry()方法KeyStore类接受别名(String参数),并将ProtectionParameter类的对象作为参数并返回 KeyStoreEntry 对象,然后将其转换为 KeyStore.SecretKeyEntry 对象.

通过将前面步骤中创建的必需键和保护参数对象的别名传递给 getEntry()方法如下所示.

//创建KeyStore.SecretKeyEntry对象 KeyStore.SecretKeyEntry secretKeyEnt =(KeyStore.SecretKeyEntry) keyStore.getEntry("secretKeyAlias",protectionParam);

步骤8:创建检索条目的关键对象

getSecretKey() SecretKeyEntry 类的方法返回一个SecretKey对象.使用此方法创建一个SecretKey对象,如下所示.

//创建SecretKey对象 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: DSAFormat of the key: RAW