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