php - Android 和 PHP 服务器 : encrypt and decrypt data

标签 php android encryption aes rsa

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

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

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

谢谢!

最佳答案

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

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

所以:

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

相关文章:

c# - 如何在 C# 中使用 PBKDF2 HMAC SHA-256 或 SHA-512 使用 salt 和迭代对密码进行哈希处理?

php - laravel 按日期检索记录

PHP等待来自命令行的输入

Android Studio SQLite 游标

encryption - OpenSSL 服务器密码选择

java - Java 中 Cipher.dofinal(byte[]) 的返回值是什么意思?

php数组通过变量数组获取多维值

php - 使用Carbon将日期转换为laravel中的毫秒

android - 将用户名和密码发送到本地主机不起作用?

java - 使用 Firebase 将多行写入 Java 中的 CSV 文件