2013-10-22 62 views
1

我使用了grails acl安全性。我想在登錄爲管理員後更改或編輯用戶的密碼。但是當我進入編輯模式時,那麼密碼字段會顯示之前在用戶表中以加密字符串形式保存的加密文本。有沒有辦法解密從數據庫中獲取的字符串,並在密碼字段中以原始字符串形式顯示?在grails acl中更改/編輯密碼

我沒有得到任何直接的解決方案在grails acl中做到這一點。

任何幫助,將不勝感激。

回答

3

顯示明文密碼沒有很好的理由。作爲用戶或管理員,如果您想更改密碼,那麼您可以像其他任何屬性一樣進行操作。顯示舊值(如果您是管理員,則將其作爲*字符,因爲它是密碼或可能哈希值),然後您可以輸入新密碼。當你更新時,這將被哈希和存儲。

只要明文密碼滿足驗證要求(最小長度,特殊字符等),那麼更新應該可以正常工作。

請注意,密碼通常不會被加密(這意味着它們可以被解密),但會被散列。哈希算法是有損的 - 給定任何輸入哈希通常是一個固定長度的輸出,所以它不能包含所有的原始數據,不能用於檢索原始值。對於密碼這很好。要進行身份驗證,您不需要對存儲的值進行解除哈希處理,並將其與登錄頁面中的明文值進行比較 - 您可以對登錄頁面值進行哈希處理並與存儲的哈希值進行比較。有些算法會相同,而其他算法(例如bcrypt)會有所不同,但是等同,算法將有一種方法來檢查它們是否相同。

+0

感謝您的回答。實際上我沒有在編輯時顯示密碼,而是以虛線方式檢索。問題是,它正在獲取長點的文本(相當於散列值的長度),我想要獲取與原始字符串長度相同的點狀文本。它也會等同於原始字符串值,否則它會再次對前面的散列字符串進行散列。我能看到的唯一方法是,我必須創建另一個可以更改密碼的鏈接頁面。 –

2

不,不可能解密密碼。在編輯模式下向用戶顯示密碼是個好主意。它的紫色安全法。您可以更改用戶的密碼,但無法看到它。

+0

沒有實際用戶將無法看到原始字符串,因爲它會出現在虛線模式。 –

+0

如果您確實需要解密密碼,請編寫您自己的加密方法。但它解密它再次是一個壞主意。 – user1791574

+1

@ Rashedul.Rubel,我是對的,你的意思是在HTML?輸入類型=「密碼」? – havenchyk

0

我還沒有對密碼進行解密或散列處理,但添加了一個新頁面來更改用戶的密碼。在我的工作流程中,我做了如下:

1. while creating a user, new hashed password is created 
2. while edit, all other desired information are allowed to edit except password (but password is showing in hashed dotted mode for security). 
3. added a new link named 'change password' in the user list beside each user 
4. finally in the newly created 'changePassword' page, i have assigned another new password with hash operation for the particular user