在两个系统之间加密和解密消息

时间:2019-01-15 22:08:17

标签: java android encryption cryptography data-integrity

我有以下系统

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

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

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

我想知道在系统之间进行加密和解密的最佳方法(算法和实践)。是否可以通过简单的方式(无需证书或密钥)来实现?

假定将有5个移动应用程序将消息推送到代理。

2 个答案:

答案 0 :(得分:1)

  

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

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

  

这可以通过简单的方式(没有证书或密钥)来实现吗?

PKI(证书和密钥)使我们能够确保完整性和机密性,而无需对机密进行硬编码(对于移动应用程序而言,这不是很明智的选择)。您已经有了现成的SSL库,因此可以将其视为“简单方法”。构建用于签名和验证消息的自定义协议只会更复杂,而且安全性可能会更低。

  

我想知道在系统之间进行加密和解密的最佳方法(算法和实践)。

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

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

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

答案 1 :(得分:0)

我认为最简单的实现方法是使用某种安全传输(https,sftp等)来使用和加密通道

如果要实现自定义协议,则需要使用一些可用的库对消息进行加密/解密。

是的,我建议使用标准的加密算法(需要使用证书)。