我在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