2015-07-13 138 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。在這個博客中,他解釋瞭如何存儲純文本密碼。