我需要解密密码才能通过电子邮件发送。任何人都可以指导我如何解密grails中的“Spring Security”密码?
由于 SMAC
答案 0 :(得分:3)
密码未加密,意味着密码可以被解密,而且密码被散列。散列采用各种输入并生成固定长度的输出,因此该过程是有损的,因为大的原始输入不能完全存储在小的散列输出中。
但密码可以。不是解密(或“去散列”)存储的密码以查看登录尝试是否有效,而是从登录页面散列密码并将其与存储的散列值进行比较。这两个不必相同,例如,当使用Bcrypt时,它们将不是相同的值,但哈希算法实现将具有确定两个哈希值是否相等的逻辑。
如果以可以检索原始值的方式存储密码,您也可以将其存储在明文中。但那是疯了,因为任何有权访问该表的人都可以看到它们。
正如评论中所提到的,绝不要通过电子邮件发送明文密码。而是配置用户可以重置密码的工作流程。 http://grails.org/plugin/spring-security-ui插件将此作为功能。如果您不想使用整个插件,请随意窃取此功能的代码。基本上,工作流程是用户请求重置电子邮件以获取其用户名。只询问用户名,而不是他们的电子邮件;使用你已经拥有的那个。生成唯一令牌并将其存储,并在电子邮件中的链接中使用它。当用户点击链接时,您可以验证令牌并知道它不仅仅是来自黑客的任意请求,而是来自用户,因为您使用他们的电子邮件地址来验证他们的身份。
答案 1 :(得分:2)
1)您应该使用单向散列算法来加密密码,而这些密码无法被解密。 (否则,它对应用程序的安全威胁)
2)绝不应在电子邮件中发送文本密码。事实上,您应该使用工作流程,例如在电子邮件中发送重置/忘记密码链接。(链接可以附加UUId作为任何新的重置/忘记密码请求的参数,足以识别)。