有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

加密无法使用对称密钥java解密csv文件

我得到了两个文件加密密钥。加密的加密数据。csv。附件。我需要使用我的私钥来解密加密的\u密钥。enc获取对称密钥,然后使用该对称密钥解密加密的\u数据。csv。enc文件

在终端上,以下命令完成作业:

openssl rsautl -decrypt -ssl -inkey my_private_key -in encrypted_key.enc -out key

openssl aes-256-cbc -d -in encrypted_data.csv.enc -out secret.txt -pass file:key

我的目标是执行这两个命令的java等价物。我能够成功地解密第一个文件并检索对称密钥

现在我无法使用对称密钥解密csv文件。我的问题出现在decipher.init(Cipher.DECRYPT_MODE, keySpec);我收到以下stacktrace

线程“main”java中出现异常。安全InvalidKeyException:密钥大小或默认参数非法

我不清楚解密过程中到底遗漏了什么。我尝试更改密码提供程序,但没有帮助。其他帖子已经发布了使用IVParameterSpec的解决方案,但是我的解密案例似乎不需要它,或者我不知道应该把它放在哪里

    File file = new File("my_private_key");
    PrivateKey pk = getPrivateKey(file);

    // Decrypt secret key
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, pk);
    File skFile = new File("encrypted_key.enc");
    FileInputStream fileInputStream = new FileInputStream(skFile);
    byte[] decodedBytes = IOUtils.toByteArray(fileInputStream);
    byte[] original = cipher.doFinal(decodedBytes);
    String decodedOriginal = new String(Base64.encodeBase64(original));
    System.out.println(decodedOriginal);

    // Use the secret key for decrypting file
    File csvFile =
            new File(
                    "encrypted_data.csv.enc");
    FileInputStream csvIS = new FileInputStream(csvFile);
    Cipher decipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    SecretKeySpec keySpec = new SecretKeySpec(original, "AES");

    decipher.init(Cipher.DECRYPT_MODE, keySpec);

    byte[] csvOriginal = decipher.doFinal(IOUtils.toByteArray(csvIS));
    String csvContents = new String(csvOriginal);
    System.out.println(csvContents);

共 (1) 个答案

  1. # 1 楼答案

    在Java1.8之前(我想,在那里的某个地方),对于超过128位的密钥大小,您受到Java Unlimited Strength Policy的限制。这是导致出现异常的最可能原因

    不幸的是,这无法修复您的代码^带有pass标志的{}使用名为EVP_BytesToKey()的不安全KDF。Java本机不支持此KDF。您无论如何都不想使用它,因为它是不安全的。更新上游代码以使用更好的KDF,如PBKDF2。Java中对此有本机支持

    此外,在openssl中使用CBC模式,在Java中使用ECB模式。而且您没有在openssl中指定IV。我觉得Java代码不是你自己写的。您可能会从花时间学习和研究代码和正在执行的命令中实际发生的情况中获益,并且您可能会更好地解决问题