java.security.KeyStoreException:无法存储非私有密钥
我已经生成了一对公钥和私钥,并试图将私钥存储在java.security.KeyStoreException:无法存储非私有密钥,java,cryptography,rsa,Java,Cryptography,Rsa,我已经生成了一对公钥和私钥,并试图将私钥存储在Java密钥库中。 但我每次都会出错 我的代码: KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); KeyPair pair = keyGen.generateKeyPair(); PrivateKey priv
Java密钥库
中。
但我每次都会出错
我的代码:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
String ss = Base64.encodeBase64String(cipher.doFinal(ppp.getBytes("UTF-8")));
System.out.println(ss);
// Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
// Loading the KeyStore object
char[] ksPassword = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_201/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, ksPassword);
// Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new
KeyStore.PasswordProtection(ksPassword);
// Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(ppp.getBytes(), "RSA");
// Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
keyStore.setEntry("mykeyalias", secretKeyEntry, protectionParam);
// Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, ksPassword);
但我在运行时在keyStore.setEntry
行中遇到以下异常:
java.security.KeyStoreException: Cannot store non-PrivateKeys
at sun.security.provider.JavaKeyStore.engineSetKeyEntry(JavaKeyStore.java:261)
at sun.security.provider.JavaKeyStore$JKS.engineSetKeyEntry(JavaKeyStore.java:56)
at java.security.KeyStoreSpi.engineSetEntry(KeyStoreSpi.java:550)
at sun.security.provider.KeyStoreDelegator.engineSetEntry(KeyStoreDelegator.java:179)
at sun.security.provider.JavaKeyStore$DualFormatJKS.engineSetEntry(JavaKeyStore.java:70)
at java.security.KeyStore.setEntry(KeyStore.java:1557)
at com.sprint.neo.bc4j.util.TestMain.StoringKeys(TestMain.java:33)
是否有人可以帮助解决此问题,以便我可以存储java密钥库的私钥以及别名,以便以后使用。上面代码中的错误在哪里。非常感谢。世上没有RSA
SecretKey
。见和。RSA是一种非对称(公共/私有)密钥机制,而不是对称(“秘密”)密钥机制。好吧,我明白了。然后,如果我想要公共/私有
密钥机制,我如何实现它。您能提出建议吗?不幸的是,在密钥库中存储私钥和公钥并不是那么简单。您需要构建(自签名)证书(持有公钥)并将其与私钥一起存储在密钥库中。如果不需要密钥库,可以将编码的私钥和公钥(作为简单的字节数组)保存到文件中。对于恢复,请使用私钥和公钥的密钥规范,并使用密钥。确定:(你能看一下下面的链接吗,这和你说的完全一样吗?——我建议你用Java keytool创建一个密钥库,并使用它,而不是通过编程方式生成自签名证书。一篇文章显示了这一点,用于创建的命令行是'keytool-genkey-keyalg RSA-alias selfsigned-ke'ystore keystore.jks-storepass password-validity 360-keysize 2048'