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

Java密码术 - 存储密钥

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

使用/生成的密钥和证书存储在称为密钥库的数据库中.默认情况下,此数据库存储在名为 .keystore 的文件中.

您可以使用 KeyStore 类访问此数据库的内容 java.security 包的内容.这管理三个不同的条目,即PrivateKeyEntry,SecretKeyEntry,TrustedCertificateEntry.

  • PrivateKeyEntry

  • SecretKeyEntry

  • TrustedCertificateEntry

在密钥库中存储密钥

在本节中,我们将学习如何在密钥库中存储密钥.要在密钥库中存储密钥,请按照以下步骤操作.

步骤1:创建KeyStore对象

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

使用 getInstance()方法创建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);

示例

以下示例将密钥存储到"cacerts"中存在的密钥库中"文件(Windows 10操作系统).

import java.io.FileInputStream;import java.security.KeyStore;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class StoringIntoKeyStore{   public static void main(String args[]) throws Exception {      //Creating the KeyStore object      KeyStore keyStore = KeyStore.getInstance("JCEKS");      //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);            //Creating the KeyStore.ProtectionParameter object      KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);      //Creating SecretKey object      SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");            //Creating SecretKeyEntry object      KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.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);      System.out.println("data stored");   }}

输出

以上程序生成以下输出 :

System.out.println("data stored");