我有一个与我自己的服务器通信的 Android 应用程序。由于我们没有https,所以我想实现自己的数据加密。服务器是用 PHP 实现的。
我想使用 AES,但我的主要问题是与本地应用程序共享服务器 key ,因为它可能会被拦截,然后任何人都可以解密我的消息。
我应该改用 RSA 吗?还是有一种安全的方式来共享 key ?
谢谢!
最佳答案
您应该使用 RSA 和 AES 加密协议(protocol)。
- RSA 加密/解密短字符串(对 CPU 来说很重)。
- AES 加密/解密大字符串(它比 RSA 更快)。
所以:
- 客户端为每个请求创建一个随机的 AES key (24 字节即可);
- 客户端用AES key 加密字符串请求(任意长度);
- 客户端使用RSA PUBLIC key 加密AES key ;
- 客户端将加密的(AES 和字符串)发送到服务器(POST 很好);
- 服务器用RSA私钥解密AES key ;
- 服务器用AES key 解密字符串;
- 服务器处理字符串请求;
- 服务器使用相同的AES key 对响应字符串进行加密;
- 服务器响应返回给客户端;
- 客户端使用 AES key 解密响应。
查看 GitHub 上的以下开源项目:github.com/rcbarioni/followzup
服务器是用 PHP 实现的,有 PHP 和 Java 的 API。客户端和服务器之间的通信使用 AES 和 RSA。
PHP和Java加密库完全兼容。 Java for Android 也兼容。
关于php - Android 和 PHP 服务器 : encrypt and decrypt data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621646/