java - 加密和解密密码并通过 http 共享

标签 java spring spring-mvc

我收到了一个奇怪的要求(因为我发现它是一个安全威胁),但不知何故我必须完成它......

要求是通过 https 发送密码。交换密码时应该使用什么加密和解密方法?

这是一个网络应用程序。密码不会存储在数据库中。

最佳答案

方法有很多,但主要提示是“不要自己编写!”

最好的方法是拥有公钥,

您获取消息,并使用目标用户的公钥对其进行加密,并使用您的私钥对消息进行签名。

然后,在另一端,此人可以使用您的公钥验证您的签名,然后使用其私钥对其进行解密,从而获得未加密的消息。

这很啰嗦,而且通常密码也不会被存储。 发送密码的目的是什么?如果说要登录 SSO 服务器,那么为什么不只传递加密密码呢。

所以你说获取密码的 MD5 哈希值 + 一个隐藏短语,将生成的哈希值发送给另一方,然后另一方将其与最终条目中的相同哈希值进行比较。有多种方法可以在不发送密码的情况下对人员进行身份验证。 OpenID 正是使用这一点,您登录 Facebook,然后当网站要求验证您的身份(使用 Facebook 登录)时,它会发送您的电子邮件和在您的浏览器上注册的 token (如果您已经登录 Facebook)或提示您在 Facebook 网站上输入密码。

然后它会传回一个包含您的电子邮件地址、姓名和 token 的小数据包。此 token 现在是该站点的登录 token (因为它使用站点 ID 作为 token 的一部分),允许您无需再次登录即可进入该站点(直到 token 过期)

因此,网站永远不会获取您的 Facebook 密码,因为他们只是获取身份验证 token 。

关于java - 加密和解密密码并通过 http 共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36883382/

相关文章:

java - Spring 事务 - 在 Sybase 过程中创建临时表时出现 Propagation.REQUIRED 问题

spring-mvc - SonarQube 提示将 ResponseEntity 与通配符一起使用

java - Log4j 日志在错误的文件中滚动(在当天之前,跳过周末)

java - 如何分解 SaxParseException (cvc-pattern-valid)?

java - Spring Autowiring 不适用于 quartz

java - spring mvc中如何使用静态资源?

maven - 在 Spring Junit 测试用例中获取 jdbcTemplate null

java - 如何测试Spring Security是否真正启用?

java - 无法匹配 Java 中的正则表达式

java - 如何将 XML 转换为 Java 树结构?