2015-07-13 92 views
0

我在Grails应用程序中使用Spring Security Plugin。保存密码时,它在数据库中以加密格式存储。我想给它发简单的密码。如何得到它?如何在Grails中获取普通密码或解密密码?

另一个Android应用程序使用我的API。从我的API,我需要发送特定用户的密码。

+0

你不想发送纯密码(也不可能)。如果你有一个应用程序,并且能够发送一个plian密码,我会将其标记为安全风险。改为允许重置密码。 –

+0

Deinum ...感谢您的回复...另一个应用程序使用我的API ...对于该应用程序,进一步的使用需要发送密码到该应用程序... – Visme

+0

@Visme听M. Deinum。只是不要存储纯文本密码,也不要发送它们。如果您需要重置密码,请生成新的一次性密码,然后将其发送给用户,并让用户选择一个新的密码。这对用户来说更好,甚至对你来说也是如此,因为如果你的用户数据库受到攻击,攻击者将得到哈希和咸的密码而不是真正的密码。 – defectus

回答

1

如果你正在阅读从数据库密码:当密码保存到数据库中他们hashedencrypted,并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) 

    } 
    ... 

} 
1

我的建议对你的,如果你暴露你的一些API的一些外部应用使用Spring security rest plugin。要开始春季安全休息,看看greach2014 talk

如果你仍然坚持使用明文密码,你不是唯一一个要求这个,但意图不同的人。存储纯文本密码的唯一逻辑就是在春季安全中调试登录问题。这并不意味着在生产应用中使用。其他人发布了similar question来调试登录问题,并且Burt Beckwith(Spring安全插件的维护者)写道this blog。在这个博客中,他解释了如何存储纯文本密码。