Java KeyStore setEntry()使用AES SecretKey [英] Java KeyStore setEntry() using an AES SecretKey

查看:1099
本文介绍了Java KeyStore setEntry()使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆