我有一個關於核心數據加密的問題。我將一些敏感的用戶數據存儲在Core Data SQLite數據庫中。臨界值都是可變換的,我正在使用AES256對它們進行加密和解密,包括每個值的個人IV。加密密鑰是用戶選擇的密碼的SHA512散列。迄今爲止這工作得很好。核心數據加密
現在關於用戶密碼。當用戶啓動應用程序時,他被要求輸入密碼。密碼正在使用SHA512散列並存儲在iOS鑰匙串中。對於每個寫入或讀取操作,NSValueTransformer將從鑰匙串中獲取密碼。如果應用程序正在關閉,我將從密鑰鏈中刪除密碼哈希。
在我的核心數據庫中,我有一個特殊的實體,它有一個隨機數!= 0,因爲它只是一個值。要測試用戶是否輸入了正確的密碼,我獲取該實體並閱讀該編號。如果是=! 0,我知道密碼是正確的,因爲當解密失敗時,NSValueTransformer總是返回0.
現在我的實際問題:你認爲這是一個好的加密方法嗎?如果輸入的密碼正確,你還會測試其他什麼?
我有點擔心,在應用程序運行時將密碼哈希存儲在鑰匙串中會讓所有事情變得更慢,因爲NSValueTransformer必須始終訪問鑰匙串。將密碼散列保存在內存中是否足夠安全,所以在應用程序關閉時它會被刪除?
你能說明你的意思嗎?「使用隨密鑰加密的隨機生成的加密密鑰和基於密碼的密鑰加密密鑰?」我正在尋找加密我的核心數據存儲的一些字段,並且正在尋找一個生成用於執行加密的密鑰的最佳實踐。我同意以密碼爲基礎是沒有道理的,因爲它可以改變。 – 2013-04-23 05:35:41