4

我有一个与我自己的服务器通信的 Android 应用程序。由于我们没有 https,我想实现自己的数据加密。服务器是用 PHP 实现的。

我想使用 AES,但我的主要问题是与本地应用程序共享服务器密钥,因为它可能被拦截,然后任何人都可以解密我的消息。

我应该改用 RSA 吗?还是有一种共享密钥的安全方式?

谢谢!

4

2 回答 2

2

您应该使用 RSA 和 AES 加密协议。

  • RSA 加密/解密短字符串(对 CPU 来说很重)。
  • AES 加密/解密大字符串(它比 RSA 更快)。

所以:

  1. 客户端为每个请求创建一个随机 AES 密钥(24 字节即可);
  2. 客户端使用 AES 密钥加密字符串请求(任意长度);
  3. 客户端使用 RSA PUBLIC 密钥加密 AES 密钥;
  4. 客户端将加密的(AES 和字符串)都发送到服务器(POST 很好);
  5. 服务器使用 RSA PRIVATE 密钥解密 AES 密钥;
  6. 服务器使用 AES 密钥解密字符串;
  7. 服务器处理字符串请求;
  8. 服务器使用相同的 AES 密钥加密响应字符串;
  9. 服务器响应返回给客户端;
  10. 客户端使用 AES 密钥解密响应。

在 GitHub 上查看以下开源项目:github.com/rcbarioni/followzup

服务器是用 PHP 实现的,并且有 PHP 和 Java 的 API。客户端和服务器之间的通信使用 AES 和 RSA。

PHP 和 Java 加密库完全兼容。Java for Android 也兼容。

于 2016-05-20T17:50:58.387 回答
0

好吧,我会执行以下操作之一 - 优先级降低:

  • 告诉你的老板 HTTPS 是要走的路。
  • 使用像 openSSL 这样的 SSL 库
  • 对消息使用 AES,对会话的 AES 密钥交换使用 RSA

最后一个是最不可取的,因为有很多事情,你可能会做错,从而意外破坏安全性。举个例子:如果你碰巧同时使用加密和压缩,你很容易受到CRIME 攻击......

于 2013-01-31T13:13:06.423 回答