在vpn后面的两个用Java编写的后端系统之间传递加密的用户名和密码的Java中,最安全的方法是什么?
目标是,如果加密的用户名和密码被某人捕获,则永远无法解密。
答案 0 :(得分:2)
从理论上讲,非对称加密工具用于传输机密数据。每个节点/客户端都有一对密钥,其中一个是私有的,只有它自己才知道,另一个是公共的,因此任何希望将机密数据发送到该特定节点的人都应该知道。关键是,如果使用客户端X的 public 密钥对有效载荷数据进行加密,则只能使用客户端X的 private 密钥对其进行解密。
SSL,TLS等协议是该概念的一些广泛使用的实现。
答案 1 :(得分:1)
假设您可以以不受监视的方式(或至少不受入侵者监视)控制两台服务器,然后可以在两台服务器上实现任何代码: 您可以在两个系统上编写自己的编成协议及其加密算法,并使用它在两个系统之间共享数据。 这样,入侵者就不知道所捕获的数据是什么,也不知道如何解释它们。
因为您说过“永不解密”,所以您的协议可以使用已经在两个服务器上定义并且不在它们之间交换的加密密钥(例如,通过握手),并且可以使用不存储任何密钥的加密算法传输数据中的加密密钥验证(如填充或哈希等),当然不应交换加密算法。
值得注意的是,ssl / tls或其他任何公开其加密算法并交换所使用的加密密钥的协议都是达不到您的目标的好主意,因为如果捕获了部分流量,则很容易对这些协议进行解密。 / p>
答案 2 :(得分:-1)
SHA(安全哈希算法)是流行的加密哈希函数之一。密码散列可用于为文本或数据文件签名。
SHA-256算法生成几乎唯一的固定大小的256位(32字节)哈希。这是一种单向函数,因此结果无法解密回原始值。
当前,SHA-2哈希被广泛使用,因为它被认为是加密领域中最安全的哈希算法。
一些诸如Guava或Apache commons编解码器的库提供了这些功能。
对于您的情况,我建议您以明文形式发送用户名,但使用SHA加密发送密码,因为它无法解密,因此在另一个后端系统中,您已将加密的字符串保存在安全的位置,如数据库,密码发送过来,您只需要查看加密的字符串匹配项即可。
这是一篇关于Java中SHA的不错的教程文章: https://www.baeldung.com/sha-256-hashing-java