java - 加密和解密两个系统之间的消息

标签 java android encryption cryptography data-integrity

我有以下系统

Android 应用 -> kafka -> 监听器服务 (Java)。

我想确保此过程中数据的完整性。

我想在 Android 应用程序中加密消息,将其插入主题,然后让监听器拾取它并解密消息。

我想知道系统之间加密和解密的最佳方法(算法和实践)是什么。这可以通过简单的方式实现(无需证书或 key )吗?

假设有 5 个移动应用程序向代理推送消息。

最佳答案

I would like to make sure that there is data integrity in this process.

如果您担心确保传输过程中的消息完整性,则在大多数情况下使用 TLS(ssl、https)即可解决问题。如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密消息),则需要对消息进行签名。在大多数情况下,您应该可以选择第一个选项 (https)。

Can this be achieved in a simple way (without certs or keys)?

PKI(证书和 key )使我们能够确保完整性和 secret 性,而无需对 secret 进行硬编码(这对于移动应用程序来说不是很明智)。您已经拥有 SSL 的开箱即用库,因此可以将其视为“简单的方法”。构建自定义协议(protocol)来签名和验证消息只会更加复杂,而且可能不太安全。

I would like to know what would be the best way (algorithm and practice) to encrypt and decrypt between the systems.

对于基本的传输安全,我建议依赖 TLS,您仍然需要对用户进行身份验证(用户名、密码?)以确保客户端的身份。 TLS 提供直至 SSL 终止点(https 服务器、kafka 监听器等)的安全通道。

如果您需要其他组件(kafka->Java)之间的端到端安全性(签名、加密消息),可以使用一些标准来加密和签署消息,例如用于 Web 服务的 WS-Security,或者您可以使用签名和加密的 JWT 来传递消息。

但是 - 您必须在客户端和验证后端之间安全地交换 key (使用单独的服务或某种 key 交换协议(protocol))。

关于java - 加密和解密两个系统之间的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54207584/

相关文章:

java - 无法在 Windows7 上启动 Tomcat 6 .exe

java - 如何使用谷歌金融货币转换器API?

android - 使用多线程从 Internet 检索单个图像

android - 缩放动画导致 View 在动画开始前缩短

c++ - 尝试在 OpenSSL 中使用 EVP 函数时出现段错误

java - 使用 "this.new InnerClass()"和 "new InnerClass()"实例化之间的区别

java - 如何使用 JPA 搜索字段中的子字符串?

java - JDBC 许可 - 将 jdbc 打包在 jar 中

java - JPA + MySql + 实现加密密码

iphone - OAuth 问题,带参数的 POST