在 2 个后端系统之间安全地传递用户名和密码



在 java 中,在 vpn 后面的 2 个用 Java 编写的后端系统之间传递加密的用户名和密码的最安全方法是什么?

目标是,如果用户名和密码被某人捕获,则永远无法解密。

从理论上讲,非对称加密工具用于传输机密数据。每个节点/客户端都有一对密钥,其中一个是私有的,只有自己知道,另一个是公共的,每个想要向该特定节点发送机密数据的人都应该知道。问题是,如果有效负载数据使用客户端 X 的公钥加密,则只能使用客户端 X 的私钥解密。

SSL,TLS等协议是该概念的一些广泛使用的实现。

假设您可以以不受监控的方式控制两台服务器(或者至少不受入侵者监控(,并且可以在两台服务器上实现任何代码,然后: 您可以在两个系统上编写自己的协议及其加密算法,并使用它来在两个系统之间共享数据。 这样,入侵者甚至不知道捕获的数据是什么或如何解释它们。

由于您说"永不解密",因此您的协议可以使用已在两台服务器上定义的加密密钥,并且不会在它们之间交换(例如通过握手(,并且可以使用不会在传输的数据中存储任何加密密钥验证的加密算法(如填充或哈希等(,当然不应该交换加密算法。

值得注意的是,SSL/TLS或任何其他公开其加密算法和交换加密密钥的协议是实现目标的坏主意,因为如果捕获其流量的某些部分,这些协议很容易被破译。

SHA(安全哈希算法(是流行的加密哈希函数之一。加密哈希可用于为文本或数据文件创建签名。

SHA-256 算法生成几乎唯一的固定大小的 256 位(32 字节(哈希。这是一个单向函数,因此无法将结果解密回原始值。

目前,SHA-2哈希被广泛使用,因为它被认为是加密领域最安全的哈希算法。

像Guava或Apache commons编解码器这样的一些库提供了这些功能。

在您的情况下,我建议您以明文形式发送用户名,但发送密码时使用 SHA 加密,因为它无法解密,在另一个后端系统中,您已将加密的字符串保存在安全的地方,例如数据库,当密码发送过来时,您只需要查看加密的字符串匹配。

这是一篇很好的教程文章,讨论 Java 中的 SHA: https://www.baeldung.com/sha-256-hashing-java

相关内容

  • 没有找到相关文章

最新更新