我有一个RSA私钥,我想用我的RSA密钥签署我的文件。但我有一个错误,我不知道如何解决。
我的代码:
public static void ReadKeysFromFile() throws FileNotFoundException, IOException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, NoSuchProviderException, SignatureException{
FileInputStream keyfis = new FileInputStream("private.key");
byte[] encKey = new byte[keyfis.available()];
keyfis.read(encKey);
keyfis.close();
PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(encKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privKey = keyFactory.generatePrivate(privKeySpec);
/* Create a Signature object and initialize it with the private key */
Signature dsa = Signature.getInstance("SHA1withRSA", "BC");
dsa.initSign(privKey);
SignFile(dsa);
}
public static void SignFile(Signature dsa) throws FileNotFoundException, IOException, SignatureException{
/* Update and sign the data */
FileInputStream fis = new FileInputStream("test.txt");
BufferedInputStream bufin = new BufferedInputStream(fis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
};
bufin.close();
/* Now that all the data to be signed has been read in,
generate a signature for it */
byte[] realSig = dsa.sign();
/* Save the signature in a file */
FileOutputStream sigfos = new FileOutputStream("sig");
sigfos.write(realSig);
sigfos.close();
}
}
我的错误显示:
Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DerInputStream.getLength(): lengthTag=109, too big.
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at skripsi.signing.GenSig.ReadKeysFromFile(GenSig.java:55)
at skripsi.signing.GenSig.main(GenSig.java:13)