请教:关于DSA数字签名的私钥的存储和读取问题
我先产生了一对DSA密钥,并采用X.509格式分别保存到文件中,然后从文件中读进来还原成公钥和私钥。同样的处理对公钥没问题,但是在处理私钥时产生一个异常。请问该如何保存、加载私钥呢?请大家帮忙看看。谢谢
生成密钥对并保存到文件中:
private static void GenerateDSAKeyPair()
{
try
{
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA", "SUN");
keyGen.initialize(1024);
KeyPair keypair = keyGen.genKeyPair();
PrivateKey privateKey = keypair.getPrivate();
PublicKey publicKey = keypair.getPublic();
X509EncodedKeySpec ksp = new X509EncodedKeySpec(publicKey.getEncoded());
FileOutputStream fos = new FileOutputStream("public.key");
fos.write(ksp.getEncoded());
fos.close();
ksp = new X509EncodedKeySpec(privateKey.getEncoded());
fos = new FileOutputStream("private.key");
fos.write(ksp.getEncoded());
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
从文件中读取私钥并还原成PrivateKey:
X509EncodedKeySpec prvKeySpec;
KeyFactory keyFactory;
prvKeySpec = new X509EncodedKeySpec(EncodedPrvKey); //EncodedPrvKey是从文件中读取的字节流
keyFactory = KeyFactory.getInstance("DSA", "SUN");
PrivateKey prvKey = keyFactory.generatePrivate(prvKeySpec); //这里产生异常
异常信息为:
java.security.spec.InvalidKeySpecException: Inappropriate key specification
at sun.security.provider.DSAKeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(Unknown Source)
at dsakeygen.main(dsakeygen.java:325)