0

我正在製作一個應用程序,要求在加載主應用程序之前輸入密碼。我計劃讓用戶在第一次運行應用程序時創建密碼,然後將密碼存儲在本地設備上,並使用本地對稱密鑰(將在應用程序第一次運行時生成)對其進行加密。這是因爲有人不能簡單地讀取存儲密碼的文件。存儲用於離線使用的對稱密鑰

如何儲存安全使用的鑰匙?還是有更好的方法來隱藏存儲的密碼以用於本地驗證?

該應用程序是專爲離線使用,所以我不能添加任何網絡功能。

回答

0

您可以在私人模式下使用SharedPreferences來存儲密碼。只要電話不是固定的,但是您可以使用加密技術來存儲密碼。我在本地存儲密碼的方法是在存儲時向密碼添加SALT。 你可以閱讀更多關於它here

0

對密碼安全的方式 - 哈希。由於密碼在散列過程中丟失,所以散列永遠無法解密。我使用MD5哈希處理下面的代碼 -

public String StringToMD5(String s) { 
try { 
    // Create MD5 Hash 
    MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); 
    digest.update(s.getBytes()); 
    byte messageDigest[] = digest.digest(); 

    // Create Hex String 
    StringBuffer hexString = new StringBuffer(); 
    for (int i=0; i<messageDigest.length; i++) 
      M hexString.append(Integer.toHexString(0xFF & messageDigest[i])); 
    return hexString.toString(); 

} catch (NoSuchAlgorithmException e) { 
    e.printStackTrace(); 
} 
return ""; 
} 

使用此代碼以哈希密碼,然後保存它使用Private SharedPreferences。當用戶再次輸入密碼時,再次對其進行散列並檢查它是否與之前的散列相同。如果哈希匹配,則授予訪問權限。

+1

Downvoted由於單次通過(從不使用只是單次通過),MD5(不要使用MD5),和一個缺鹽(不要使用無鹽密碼)。 –

0

請閱讀托馬斯Pornin的canonical answer to How to securely hash passwords?開始。

PBKDF2選項在問題PBKDF2 function in Android列出,但包括天然SecretKeyFactory方法以及Spongycastle,BouncyCastle的,rtner.de等

龍,加密隨機每個密碼鹽是必需的(騰出空間爲未來的發展增加一個以上的密碼!)。

永遠不要問PBKDF2更多的密鑰長度比本機功能支持更多 - PBKDF2-HMAC-SHA-512爲64字節,PBKDF2-HMAC-SHA-1爲20字節。

始終使用盡可能高的迭代計數爲您的用戶能夠忍受。即使對於android設備,對於自己設備上的單個用戶,在應用程序啓動時僅執行一次,對於PBKDF2-HMAC-SHA-1,成千上萬或更多,對於PBKDF2-HMAC-SHA,成千上萬或更多-512。

注意PBKDF2的主要用途是創建加密密鑰 - 您可以使用相同的密碼輸入的爲您生成加密使用AES文件(而不是在ECB模式)的加密密鑰;只是使用不同的鹽和不同數量的迭代。如果你只是這樣做,那麼你甚至不需要密碼哈希;只需嘗試使用生成的密鑰和存儲的迭代次數來解密文件 - 如果有效,那就是正確的密碼。如果失敗,那不是。