我在Grails应用程序中使用Spring Security Plugin。保存密码时,它在数据库中以加密格式存储。我想给它发简单的密码。如何得到它?如何在Grails中获取普通密码或解密密码?
另一个Android应用程序使用我的API。从我的API,我需要发送特定用户的密码。
我在Grails应用程序中使用Spring Security Plugin。保存密码时,它在数据库中以加密格式存储。我想给它发简单的密码。如何得到它?如何在Grails中获取普通密码或解密密码?
另一个Android应用程序使用我的API。从我的API,我需要发送特定用户的密码。
如果你正在阅读从数据库密码:当密码保存到数据库中他们hashed不encrypted,并the process involved in hashing is not reversible,所以简单的答案是:不,你不能。
保存密码时数据库(这样就可以对它们进行解密,当你在你的情况来不寻常的场景等)可以使用加密,但它是不是一个好主意,that is why hashing functions are preferred to encryption algorithm for saving passwords。
但如果你真的需要这一点,并知道如何处理风险可以拦截来电user.save()
,专门拦截beforeInsert()
和beforeUpdate()
方法是,其中的密码被编码。
所以你的用户的beforeInsert()
和beforeUpdate()
方法看起来就像这样:
beforeInsert(){
...
yourApiService.sendPassword(password)
...
password = securityService.encodePassword(password)
...
}
beforeUpdate(){
...
if(isDirty('password')){
yourApiService.sendPassword(password)
...
password = securityService.encodePassword(password)
}
...
}
我的建议对你的,如果你暴露你的一些API的一些外部应用使用Spring security rest plugin。要开始春季安全休息,看看greach2014 talk。
如果你仍然坚持使用明文密码,你不是唯一一个要求这个,但意图不同的人。存储纯文本密码的唯一逻辑就是在春季安全中调试登录问题。这并不意味着在生产应用中使用。其他人发布了similar question来调试登录问题,并且Burt Beckwith(Spring安全插件的维护者)写道this blog。在这个博客中,他解释了如何存储纯文本密码。
你不想发送纯密码(也不可能)。如果你有一个应用程序,并且能够发送一个plian密码,我会将其标记为安全风险。改为允许重置密码。 –
Deinum ...感谢您的回复...另一个应用程序使用我的API ...对于该应用程序,进一步的使用需要发送密码到该应用程序... – Visme
@Visme听M. Deinum。只是不要存储纯文本密码,也不要发送它们。如果您需要重置密码,请生成新的一次性密码,然后将其发送给用户,并让用户选择一个新的密码。这对用户来说更好,甚至对你来说也是如此,因为如果你的用户数据库受到攻击,攻击者将得到哈希和咸的密码而不是真正的密码。 – defectus