java - 解密加密文件内容?

标签 java cryptography public-key-encryption encryption

我在使用 RSA 公钥解密解密文件时遇到问题。我的流程是接收xml文件,加密内容,写回同一个文件。另一个函数解密内容。我的源代码是:

public void decryptFile(String fileName,PrivateKey privateKey) throws Exception {
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    FileInputStream fis = new FileInputStream(fileName);
    File file=new File("decryptedfile.xml");
    if(file.exists()) {
        file.delete();
    }
            FileOutputStream fos = new FileOutputStream("decryptedfile.xml");
    CipherInputStream cis = new CipherInputStream(fis, cipher);
    int i;
    byte[] block = new byte[32];
    //System.out.println("Read : "+cis.read(block));
    while ((i = cis.read(block)) != -1) {
        System.out.println(String.valueOf(i));
        fos.write(block, 0, i);
    }
    fos.close();
}

我只是将加密文件的名称和相应的私钥值传入函数。然而,cis.read(block) 在第一次尝试时返回 -1。谁能建议我如何解密加密文件?

最佳答案

您的文件几乎可以肯定不是 RSA 加密的。它可能在随机对称 key 下使用 AES 加密,然后使用 RSA 加密 key 。

您假设有人实际上仅使用 RSA 加密了整个文件。假设实现甚至允许您这样做(我已经看到有人在尝试这样做时会抛出异常),但做任何有用的事情都太慢了。

关于java - 解密加密文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063255/

相关文章:

java - PasswordHash.java 未生成匹配的 PBKDF2-HMAC-SHA1 哈希值

可以在具有 32Kb 内存的 8 位设备上实现 RSA 加密吗?

javascript - 客户端 (JS) 和服务器 (PHP) 中的 AES 256

java - 如何比较两行或获取值与比较的行不匹配的字段?

java - 为什么重写的方法应该在这个程序中公开?

java - 如何知道 Locale 使用的是 12 小时制还是 24 小时制?

python - 安全的加密签名必须驻留在它所引用的文件之外吗?

c# - 如何验证签名,从 PEM 文件加载公钥?

ruby-on-rails - AWS 中的私钥管理是否有推荐的解决方案?

java - 使用 JGit 列出与给定标签关联的提交