Java 使用密码RSA编写加密的PDF文件
在下面的代码中,我获取一个现有的pdf文件,对其进行加密,然后输出加密文件。我的问题是输出的文件不能正常工作。它创建一个零字节的文件。我用一个简单的文本文件“sample.txt”尝试了相同的代码,效果很好。输出的文件是通过加密创建的 谁能告诉我我可能做错了什么?它与PDF文件的工作方式不同吗Java 使用密码RSA编写加密的PDF文件,java,pdf,encryption,Java,Pdf,Encryption,在下面的代码中,我获取一个现有的pdf文件,对其进行加密,然后输出加密文件。我的问题是输出的文件不能正常工作。它创建一个零字节的文件。我用一个简单的文本文件“sample.txt”尝试了相同的代码,效果很好。输出的文件是通过加密创建的 谁能告诉我我可能做错了什么?它与PDF文件的工作方式不同吗 public void encryptFile() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException
public void encryptFile() throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, CertificateException, KeyStoreException, IOException {
FileInputStream fis = new FileInputStream("c:\\sample.pdf");
FileOutputStream fos = new FileOutputStream("c:\\sample_encrypted");
Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
c.init(Cipher.ENCRYPT_MODE, getSapPublicCertificate().getPublicKey());
CipherOutputStream cos = new CipherOutputStream(fos, c);
byte[] buf = new byte[2048];
int read;
while ((read = fis.read(buf)) != -1) {
cos.write(buf, 0, read);
}
fis.close();
cos.flush();
cos.close();
}
编辑
我应该提到的是,我尝试了上面相同的事情,但没有任何cipher/cipherOutPutStream,新的克隆文件正确生成。代码如下。所以我倾向于相信这是密码或CipherOutputStream的问题。但是,正如前面提到的,它在一个简单的文本文件中运行良好
byte[] buffer = new byte[2048];
int read;
while ((read = fis.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}
EDIT2方法GetCertificate()的内容
你需要使用。不能使用RSA加密大文件。我确实想知道你是如何处理你的错误的,或者当你的程序没有完成时你会做什么;Java运行时系统应该能够捕捉到这些问题
文本文件和PDF文件之间的文件处理没有区别,只是大小不同
混合加密归结为:
你知道getSAPublicCertificate().getPublicKey()返回什么值吗?嗨,Jay,我在上面添加了方法定义。我的配对钥匙是用这个Hi的信息生成的,让我看看我是否了解这个混合动力系统,如果我不了解,请纠正我。我需要使用对称算法加密文件。然后使用公钥将对称密钥和对称加密的文件一起加密。然后,我使用非对称私钥对其进行解密。这将为我提供对称密钥和加密文件。然后我使用对称密钥解密对称加密的文件。我接近了吗?确实接近了,我会把它写在答案里。
public Certificate getSapPublicCertificate() throws IOException, CertificateException, KeyStoreException, NoSuchAlgorithmException {
char[] password = "mypass".toCharArray();
String alias = "myalias";
FileInputStream fIn = new FileInputStream(keystoreSapCertificate);
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(fIn, password);
Certificate cert = keystore.getCertificate(alias);
return cert;
}