java secretkey用法_Java KeyStore setEntry()使用AES SecretKey

I'm currently working on an key-handling class in Java, specifically using a KeyStore. I'm trying to generate a SecretKey with an AES instance, then place it inside of the KeyStore using the setEntry() method.

I've included the relevant sections of my code:

// The KS Object

private KeyStore keyStore;

private KeyStore.SecretKeyEntry secretKeyEntry;

private KeyStore.ProtectionParameter protectionParameter;

private KeyGenerator keyGenerator;

private SecretKey secretKey, newSecretKey;

keyStore = KeyStore.getInstance(KeyStore.getDefaultType());

keyGenerator = KeyGenerator.getInstance("AES");

keyGenerator.init(256);

newSecretKey = keyGenerator.generateKey();

protectionParameter = new KeyStore.PasswordProtection(KEYSTORE_PASSWORD.toCharArray());

secretKeyEntry = new KeyStore.SecretKeyEntry(newSecretKey);

keyStore.setEntry(KEYSTORE_ALIAS, secretKeyEntry, protectionParameter);

The two constants I've used are defined as Strings, too.

The Exception I keep getting is in my setEntry() call:

java.security.KeyStoreException: Cannot store non-PrivateKeys

at sun.security.provider.JavaKeyStore.engineSetKeyEntry(Unknown Source)

at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(Unknown Source)

at java.security.KeyStoreSpi.engineSetEntry(Unknown Source)

at java.security.KeyStore.setEntry(Unknown Source)

I'm using mainly this document http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html as a reference, along with some other sources.

Thanks in advance for any help.

解决方案

I found this as a non-accepted answer on stackoverflow:

The "Cannot store non-PrivateKeys" error message usually indicates you

are trying to use secret symmetric keys with a JKS keystore type. The

JKS keystore type only supports asymmetric (public/private) keys. You

would have to create a new keystore of type JCEKS to support secret

keys.

It is very hard to confirm this, although my memory tells me it is correct.

Java keystore(密钥库)是 Java 平台提供的一种安全存储区域,用于保存密钥、证书和其他敏感数据,以便它们可以被 Java 应用程序使用。在 Java 语言中,可以使用 Java keystore 来管理 SSL/TLS 证书、数字签名证书、数字证书等。 下面是使用 Java keystore 的一些基本步骤: 1. 创建一个新的 Java keystore 文件。可以使用 keytool 命令来创建新的 keystore 文件,例如:`keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore mykeystore.jks`。此命令将创建一个新的 Java keystore 文件,其中包含一个 RSA 加密算法的密钥对,并使用 "myalias" 作为别名。 2. 将证书导入到 Java keystore 中。可以使用 keytool 命令来导入证书,例如:`keytool -import -alias myalias -file mycert.crt -keystore mykeystore.jks`。此命令将把名为 "mycert.crt" 的证书导入到 Java keystore 中,并使用 "myalias" 作为别名。 3. 查看 Java keystore 中的证书。可以使用 keytool 命令来查看 keystore 中的证书,例如:`keytool -list -v -keystore mykeystore.jks`。此命令将列出 Java keystore 中的所有密钥和证书,并显示其详细信息。 4. 使用 Java keystore 中的证书。可以使用 Java 代码来加载 Java keystore 文件,例如:`KeyStore ks = KeyStore.getInstance("JKS");`,然后使用 `ks.load()` 方法加载 keystore 文件。一旦加载了 keystore 文件,就可以使用 Java API 来访问 keystore 中的密钥和证书,并执行加密、解密、签名、验证等操作。 需要注意的是,使用 Java keystore 时需要保护好 keystore 文件的安全性,防止其被恶意攻击者利用。通常需要设置 keystore 文件的访问权限,并使用密码来保护 keystore 文件的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值