【发布时间】:2017-09-08 09:11:13
【问题描述】:
作为私钥和公钥的两个字符串是:
static String Public =
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH+wPrKYG1KVlzQUVtBghR8n9d" + "/n" +
"zcShSZo0+3KgyVdOea7Ei7vQ1U4wRn1zlI5rSqHDzFitblmqnB2anzVvdQxLQ3Uq" + "/n" +
"EBKBfMihnLgCSW8Xf7MCH+DSGHNvBg2xSNhcfEmnbLPLnbuz4ySn1UB0lH2eqxy5" + "/n"+
"0zstxhTY0binD9Y+rwIDAQAB"+ "/n";
static String Private =
"MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIr5NQ/LYPG/UCAggA" +"/n"+
"MBQGCCqGSIb3DQMHBAiLh89iGSkmoASCAoBCpAo9/IzDE3yGhvWr9RgozE7revOo" +"/n"+
"V2OXmU+d0+WYAAx2GYVaUCbFVrmgiVmrbiTgLUMXAGIpvxQ2rzyIvRHW/RN3Gcky" +"/n"+
"qR/AwBatzixqrnoS4aD1/Ovjr4hwde4XHYbPEilZZuVAJFiznhy73qm/So4XghSY........." ;
我已经阅读了其他问题并尝试了他们的解决方案,但没有任何效果....我有一个公钥和私钥都是字符串。我需要将它们转换为“密钥”,但我不断收到 java.security.spec .InvalidKeySpecException: java.security.InvalidKeyException ..at generatePublic 和 generatePrivate 函数.. 密钥也只是用于测试因此,如果其他人知道它们就可以了...
public static Key loadPublicKey(String stored) throws GeneralSecurityException, IOException
{
byte[] data = Base64.getDecoder().decode((stored.getBytes()));
X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
KeyFactory fact = KeyFactory.getInstance("RSA");
return fact.generatePublic(spec);
}
public static Key loadPrivateKey(String key64) throws GeneralSecurityException, IOException {
byte[] clear = Base64.getDecoder().decode(key64.getBytes());
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
KeyFactory fact = KeyFactory.getInstance("RSA");
PrivateKey priv = fact.generatePrivate(keySpec);
Arrays.fill(clear, (byte) 0);
return priv;
}
【问题讨论】:
-
去掉换行符
+ "/n" -
仍是同样的问题..我得到java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:我改变了公共密钥: “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH + wPrKYG1KVlzQUVtBghR8n9dzcShSZo0 + 3KgyVdOea7Ei7vQ1U4wRn1zlI5rSqHDzFitblmqnB2anzVvdQxLQ3UqEBKBfMihnLgCSW8Xf7MCH + DSGHNvBg2xSNhcfEmnbLPLnbuz4ySn1UB0lH2eqxy50zstxhTY0binD9Y + rwIDAQAB”跨度>
-
我自己用公钥试了一下,效果很好
-
换行符是
\n,而不是/n。在字符串中,这看起来像"\\n"。 -
Necroed but for info:除了无关的
/n,您的Public确实是适用于JavaX509EncodedKeySpec的X.509-SPKI 公钥的base64,但您的Private是(base64 开头的)加密 PKCS8 私钥 (EncryptedPrivateKeyInfo) 而PKCS8EncodedKeySpec必须未加密 或此处解密 .如果您有密码并且(可以)使用 BouncyCastle,请参阅stackoverflow.com/questions/49932334/…,否则会相当复杂。
标签: java encryption rsa encode