gpt4 book ai didi

java - 用 Java 解密 openssl blowfish

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:02 27 4
gpt4 key购买 nike

我有一个远程系统通过 openssl 命令行程序使用 blowfish 加密向我发送数据。

具体来说,正在运行的命令是:

openssl enc -blowfish -a -salt -in original.txt -out encrypted.txt -pass pass:secret

对于输入 This is a test. 生成 U2FsdGVkX19bSsC3dXTOYssoOK5L3THkhXgiB7X1Trv6SaVO2TGz0g==

我正在尝试使用以下代码在 Java 的另一端解密此内容。

// requires commons-io and commons-codec
public void testDecryption() throws Exception {
File encryptedFile = new File("encrypted.txt");
String password = "secret";

byte[] base64EncryptedBytes = FileUtils.readFileToByteArray(encryptedFile);
byte[] encryptedBytes = new Base64().decode(base64EncryptedBytes);

SecretKeySpec blowfishKey = new SecretKeySpec(password.getBytes("ASCII"), "Blowfish");
Cipher blowfishCipher = Cipher.getInstance("Blowfish/ECB/NoPadding");
blowfishCipher.init(Cipher.DECRYPT_MODE, blowfishKey);
byte[] decryptedContent = blowfishCipher.doFinal(encryptedBytes);

System.out.println(new String(decryptedContent));
}

而不是当前生成的原始消息...

êõïÖ¶M≥ O]¢∞;Z<HVÖ_’˚h‘:O›c=w◊®zÉ9˘

我做错了什么?

一些可能的理论

  • Blowfish/ECB/NoPadding 不是正确的密码实例。我已经尝试了 http://docs.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html#AppA 中列出的所有模式和填充组合除了 OAEPWith[digest]And[mgf]Padding 填充不成功。
    • 我注意到,如果我使用 openssl enc -d -blowfish -a -in encrypted.txt 从命令行解密文件,密码提示将标记为“bf-cbc”,这建议 Blowfish/CBC 而不是 Blowfish/ECB,但是如果我使用它,我会得到一个 java.security.InvalidKeyException: Parameters missing 异常,但我不确定我可以添加什么参数。
  • 命令行上给出的密码应该以某种方式转换,或者 getBytes("ASCII") 不正确。
  • Java 代码中需要对盐进行一些额外的处理。

最佳答案

经过大量搜索后,我遇到了 not-yet-commons-ssl这似乎提供了一种方法...

byte[] decrypted = OpenSSL.decrypt("blowfish", password.toCharArray(), base64EncryptedBytes);

当我有空的时候,我会深入研究他们的代码并找出到底做了什么。与此同时,它看起来像 OpenSSL.java是开始的地方。

关于java - 用 Java 解密 openssl blowfish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468799/

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