gpt4 book ai didi

java - 使用 Cipher RSA 写入加密的 PDF 文件

转载 作者:行者123 更新时间:2023-12-02 05:53:52 29 4
gpt4 key购买 nike

在下面的代码中,我抓取一个现有的 pdf 文件,对其进行加密,然后输出加密的文件。我的问题是输出的文件无法正常工作。它创建一个零字节的文件。我用一个简单的文本文件“sample.txt”尝试了相同的代码,效果很好。输出的文件是通过加密创建的。

谁能告诉我我做错了什么? PDF 文件的工作方式是否有所不同?

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 并且新的克隆文件已正确生成。代码如下。所以我倾向于认为这是 Cipher 或 CipherOutputStream 的问题。但话又说回来,正如前面提到的,使用一个简单的文本文件一切都可以正常工作。

    byte[] buffer = new byte[2048];
int read;
while ((read = fis.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}

EDIT2 方法 getCertficate() 的内容

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;
}

最佳答案

您需要使用hybrid encryption 。您无法使用 RSA 加密大文件。我确实想知道你如何处理你的错误或者当你的程序没有完成时你会做什么;此类问题应该由 Java 运行时系统捕获。

文本文件和 PDF 文件的文件处理没有区别,只是大小不同。

<小时/>

混合加密归结为:

  1. 生成完全随机的对称 key (例如 AES-128);
  2. 加密文件,例如使用 IV 为零的 AES-CBC;
  3. 使用 RSA-OAEP 或 RSA-PKCS#1 加密对称 key ;
  4. 发送或存储密文和加密的对称 key ;

解密过程如下:

  1. 检索密文和RSA加密的对称 key ;
  2. 使用私钥解密对称 key ;
  3. 解密密文。

关于java - 使用 Cipher RSA 写入加密的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294401/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com