Java KeyStore setEntry()使用AES SecretKey [英] Java KeyStore setEntry() using an AES SecretKey
问题描述
我目前正在使用Java中的一个密钥处理类,特别是使用KeyStore。我试图用AES实例生成一个SecretKey,然后使用setEntry()方法把它放在KeyStore里面。
我已经包括了我的代码:
// KS对象
私钥KeyStore keyStore;
私人KeyStore.SecretKeyEntry secretKeyEntry;
private KeyStore.ProtectionParameter protectionParameter;
私钥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);
我使用的两个常量也定义为字符串。
我继续收到的异常是在我的setEntry()调用中:
java.security.KeyStoreException :无法在sun.security.provider.JavaKeyStore.engineSetKeyEntry(Unknown Source)上存储非PrivateKeys
at sun.security.provider.JavaKeyStore $ JKS.engineSetKeyEntry(Unknown Source)
at java ./security.KeyStoreSpi.engineSetEntry $ b 我主要使用本文档 http ://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html 作为参考,以及一些其他来源。
解决方案我发现这个作为非acce在stackoverflow上的pted答案:
无法存储非私钥错误消息通常表示您
正在尝试使用秘密对称具有JKS密钥库类型的密钥。
JKS密钥库类型仅支持非对称(公/私)密钥。你
将不得不创建一个类型为JCEKS的新密钥库来支持密钥
密钥。
很难证实这一点,虽然我的记忆告诉我是正确的。
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 setEntry()使用AES SecretKey的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!