gpt4 book ai didi

Java AES加密: need files to decrypt properly in freely available decryptor tools

转载 作者:行者123 更新时间:2023-11-30 04:11:25 25 4
gpt4 key购买 nike

我正在使用 Java AES 加密来加密将发送给收件人的数据。每个收件人都有自己的 key ,他们和我都知道。

他们的想法是,他们可以使用免费的 AES 解密工具来解密数据。

这是我的代码:

public class AESencrypt {

private static final String ALGO = "AES/CBC/PKCS5Padding";
private static final byte[] keyValue = new byte[]{'T', 'h', 'e', 'B', 'e', 's', 't', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'};
private static byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

public void String encryptToFile(String filename, String data) throws Exception {
Key key = new SecretKeySpec(keyValue, "AES");
Cipher c = Cipher.getInstance(ALGO);
IvParameterSpec ivspec = new IvParameterSpec(iv);
c.init(Cipher.ENCRYPT_MODE, key, ivspec);
byte[] encVal = c.doFinal(data.getBytes());
FileOutputStream fileOutputStream = new FileOutputStream(filename);
fileOutputStream.write(encVal);
fileOutputStream.close();
}

public static void main(String[] args) throws Exception {
encryptToFile("foo.aes", "hellothere");
}
}

}

为了验证这一点,我使用了 Online AES Encryption / Decryption Tool解密一些示例数据(效果很好!)。

现在,我想使用免费的 AES 解密工具,以便接收者无需使用在线工具即可解密其 PC 上的数据 - 这就是挫败感开始的地方。

我开始安装和测试各种不同的 AES 解密工具:我小心地输入 key ,选择 CBC 算法,选择我的文件并点击“解密”,但没有一个工具可以解码我的示例文件 foo .aes - 它们都因错误而失败,并且在一种情况下给出了零字节的空文件。

我尝试了至少 4 个不同的 AES 加密器/解密器工具,但没有一个能够解密我的文件,这让我相信我的代码可能存在问题。

  • CriptAES
  • AES 地穴
  • 高级 AES 加密器
  • Cr!ptAES

如果有人可以查看我的代码,我将不胜感激。

或者,可能有一个 AES 解密工具可以与上面的代码一起使用。

最佳答案

您面临的问题是,虽然 AES 是一个标准,但它只是一个加密原语,您需要一个完整的协议(protocol)

您提出的协议(protocol)的工作原理基本上如下:

  • 以某种方式预先共享 key 。 key 定义为 ASCII 字符集中的 16 个字符;不应对其应用 key 派生函数(预定义的详细信息)。
  • 在 CBC 模式下使用 AES 加密明文,并使用 PKCS #5 填充(预定义的详细信息)。使用预定义的 IV。

如您所见,为了成功通信,双方都必须了解几个预定义的详细信息,而 AES 只是其中之一。您尝试过的工具显然在所有这些细节上都不一致。

解决方案当然是使用标准协议(protocol)。

要选择合适的协议(protocol),您必须首先确定为什么需要加密,因为加密本身并不是理想的目标。您想防范什么?

本质上,加密是用少量数据( key )的 secret 性替代大量数据的 secret 性。如果用户错误地泄露了 key 会发生什么?如果您可以安全地将 key 发送给用户,为什么不能也通过该 channel 发送其余数据? (有关该主题的文章:http://blogs.msdn.com/b/ericlippert/archive/2011/09/27/keep-it-secret-keep-it-safe.aspx)

认识到 secret 性只是众多安全属性之一也很重要。您的协议(protocol)无法提供真实性(保证创建了消息并且它没有被修改),因为 CBC 具有相当的延展性,并且它可能会泄漏有关明文的信息,因为您使用了静态 IV .

如您所见,设计安全协议(protocol)绝非易事。即使是你的决定中最微小的细节,你也必须了解。即使是专家也不一定总是正确的。

为了避免所有麻烦,最好的选择是使用完善的标准。使用TLS用于通过网络连接传输数据,以及 PGP用于加密磁盘上的数据。这两种协议(protocol)都可以针对几乎任何用例进行配置。

关于Java AES加密: need files to decrypt properly in freely available decryptor tools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19517916/

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