“如何解密”;“春季安全”;grails中的密码?

“如何解密”;“春季安全”;grails中的密码?,grails,encryption,spring-security,Grails,Encryption,Spring Security,我需要解密密码才能发送电子邮件。谁能告诉我如何在grails中解密“Spring安全”密码 谢谢 Smac密码没有加密,这意味着它们可以被解密,它们是散列的。散列接受各种输入并生成固定长度的输出,因此该过程是有损的,因为大的原始输入不能完全存储在小的散列输出中 但这对密码没关系。您可以从登录页面对密码进行散列,并将其与存储的散列值进行比较,而不是解密(或“反散列”)存储的密码以查看登录尝试是否有效。这两个值不必相同,例如,当使用Bcrypt时,它们的值不会相同,但哈希算法实现将具有确定两个哈希是

我需要解密密码才能发送电子邮件。谁能告诉我如何在grails中解密“Spring安全”密码

谢谢
Smac

密码没有加密,这意味着它们可以被解密,它们是散列的。散列接受各种输入并生成固定长度的输出,因此该过程是有损的,因为大的原始输入不能完全存储在小的散列输出中

但这对密码没关系。您可以从登录页面对密码进行散列,并将其与存储的散列值进行比较,而不是解密(或“反散列”)存储的密码以查看登录尝试是否有效。这两个值不必相同,例如,当使用Bcrypt时,它们的值不会相同,但哈希算法实现将具有确定两个哈希是否相等的逻辑

如果您以可以检索原始值的方式存储密码,那么您也可以将其存储在明文中。但这太疯狂了,从那时起,任何有权访问该表的人都可以看到它们

正如评论中提到的,永远不要通过电子邮件发送明文密码。而是配置一个工作流,用户可以在其中重置密码。插件将此作为一项功能。如果您不想使用整个插件,请随意窃取此功能的代码。基本上,工作流程是用户请求重置其用户名的电子邮件。只要求用户名,但不要求他们的电子邮件;使用你已经拥有的。生成一个唯一的令牌并将其存储,然后在电子邮件的链接中使用它。当用户单击链接时,您可以验证令牌,并知道它不仅仅是来自黑客的任意请求,而是来自用户,因为您使用他们的电子邮件地址来验证他们的身份。

1)您应该使用单向散列算法加密无法解密的密码。(否则,其对应用程序的安全威胁)


2) 绝不应在电子邮件中发送文本密码。事实上,您应该使用类似于在电子邮件中发送重置/忘记密码链接的工作流。(链接可以附加UUId作为任何新的重置/忘记密码请求的参数,这足以识别)。

我真的希望您不能解密密码(您应该使用单向哈希算法),如果你可以解密密码,你已经有了安全风险。这取决于实际配置,但通常没有办法“解密”密码。只有“暴力攻击”。顺便说一句,如果您只是从spring应用程序迁移到grails,并且不知道如何支持现有的授权,那么可以看看spring安全插件grails。您不会在电子邮件中发送密码。如果用户忘记了密码,那么您会向他们发送一个带有一次性令牌的链接,该链接会将他们发送到可以设置新密码的页面。