我想隱藏用戶在用戶手機中輸入的一些數據加密。據我所知,我可以使用密鑰/種子值對數據進行加密/解密,但是如果我將密鑰值隱藏在代碼中,我知道它可以以某種方式找到(例如反編譯Java代碼)。在Android應用程序中隱藏加密密鑰
您有任何建議可以讓流程更難嗎?
我想隱藏用戶在用戶手機中輸入的一些數據加密。據我所知,我可以使用密鑰/種子值對數據進行加密/解密,但是如果我將密鑰值隱藏在代碼中,我知道它可以以某種方式找到(例如反編譯Java代碼)。在Android應用程序中隱藏加密密鑰
您有任何建議可以讓流程更難嗎?
這是不可能的隱藏在應用程序的密鑰,這樣一個機智的黑客將無法將其拉出。您可以嘗試混淆密鑰並使其難以找到,但始終可以實現。
看到這個:https://www.excelsior-usa.com/articles/java-obfuscators.html#examples
最好的辦法是要求用戶指定PIN或密碼,並使用它作爲加密密鑰。這樣,如果設備丟失或被盜,密鑰仍然安全,並且還可以防止某人反編譯您的應用程序,併爲您的應用程序的所有實例獲取加密密鑰。
如果你這樣做是對用戶名/密碼數據,您應該結帳實現一個Authenticator。
如果加密/解密一切都發生在手機上,一個意志堅定的黑客將能夠破解它。您可以通過使用obfustication或(如果適用於您的應用程序)將用戶輸入添加到加密/解密代碼中,使生活更加艱難。
如果你的應用需要網絡連接,遠程加載一些代碼在其他地方運行的服務器,使加密數據所居住的設備上,但關鍵點在運行時下載它可能是值得的。仍然不能防黑客,但它可以降低被盜設備上機密數據的風險。
由於Android上沒有任何安全存儲(至少爲2.2),你就必須自己編寫。
做到這一點真的很安全的唯一方法是從用戶提供的密碼派生的密鑰(PBKDF2/RFc2898作爲的方式來表示)來加密。 Crypto只與您的密鑰一樣安全,如果您將它存儲在電話上,則有人可以找到並使用它。這使您可以讓用戶存儲密鑰,而無需真正記住一個大的AES密鑰。
有可能是這樣的圖書館爲Android。我爲windows phone編寫了一個,如果你想要如何做到這一點,可以找到here。
一個的冰淇淋三明治的新功能(Android 4.0版本)是keychain API。從Platform Highlights page(強調我的):
Android 4.0使應用程序更容易管理身份驗證 和安全會話。新的鑰匙串API和基礎加密存儲允許應用程序存儲和檢索私鑰以及相應的證書鏈。 任何應用程序都可以使用鑰匙串 API安全地安裝和存儲用戶證書和CA。
你知道任何教程/示例代碼?!謝謝。 –
請參閱我的相關問題:http://stackoverflow.com/questions/30951805/encrypt-on-server-side-and-decrypt-on-client-side –
@slayton關於使用密碼加密密鑰: 是密碼將被保存散列,然後散列值將成爲關鍵,或直接將密碼用作關鍵? 只是要求知識 –