【问题标题】:Encrypting/Decrypting(Using AES) Large files and transferring over HTTP加密/解密(使用 AES)大文件和通过 HTTP 传输
【发布时间】:2013-11-18 11:18:25
【问题描述】:

我的要求要求我使用 AES 加密文件并通过 HTTP 发送。在服务器上,我将文件内容读入一个字节 [],使用 AES/CBC/PKCS5Padding 对其进行加密,然后进行 base 64 编码和将其从服务器写入流中。消费者(移动设备应用程序)检索此加密和编码数据并进行解码,然后解密并将纯数据写入固定格式的文件。对于小文件来说一切正常。但我觉得这是一种天真的方法。我可以看到这会导致服务器和设备上的高内存消耗,当我考虑文件大小 > 100MB 时甚至导致应用程序崩溃。请告诉我如何继续。我搜索了很多位,虽然我找到了加密的方法,但它们似乎都没有效率。 如果需要,请告诉我,我会发布我的代码和任何其他附加信息。谢谢。

【问题讨论】:

标签: java http encryption cryptography base64


【解决方案1】:

如果您只需要传输安全性,那么您应该选择 TLS。如果您坚持使用此协议,或者如果您需要应用程序级别的安全性(存储在服务器上),那么您应该使用流,正如 user1516873 已经指出的那样。请注意,HTTP 可以处理二进制数据,因此在技术上不需要 base 64 编码。如果您确实需要 base 64,那么使用编码/解码流也是有益的。 Guava 似乎实现了一个很好的base64 编码接口,包括stream support

请注意,通过不受信任的网络发送加密数据并不能保护您免受更改。如果 padding oracles 适用,那么您甚至可能不提供机密性,这就是首先使用加密的整个想法。

【讨论】:

  • GuavaCommons Codec 都有 Base64 流的实现。
  • 嗨 owlstead,是的,我们还需要应用程序级别的安全性。事实上,我们使用的是 https。正如你所说,我以前没有使用 base 64 编码,但是在接收到时会导致一些数据丢失另一边。所以他们无法解密。为了避免这种情况,我们采用了最后一层 base 64 编码。你能详细说明一下吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多