簡體   English   中英

對Android加密的工作方式感到困惑

[英]Confused about how Android Encryption works

好的,我正在開發一個應用程序,我想將文件存儲在用戶的SD卡上,但是我想對文件進行加密。 我研究了幾個使用DES加密來加密文件和數據的站點,但是我對此有些困惑。 我看到的所有示例都使用這樣的一行:

SecretKey key = KeyGenerator.getInstance("DES").generateKey();

我遇到的問題是我得到了要加密的密鑰,顯然我需要相同的密鑰來解密。 但這似乎是個自相矛盾的問題,因為如果我將密鑰存儲在文件或數據庫中,那么有人無法獲取密鑰並解密我的文件嗎? 也許我錯過了一些東西,但是有沒有一種方法可以使用提供的密碼短語生成密鑰? 為何有人必須將生成的密鑰存儲在其他地方,而又不想使用密鑰呢?

首先,請不要使用DES。 它已經打破了很多年。 請改用AES

我遇到的問題是我得到了要加密的密鑰,顯然我需要相同的密鑰來解密。

如果您使用對稱密碼技術,就可以了。 否則請看不對稱加密

但這似乎是個自相矛盾的問題,因為如果我將密鑰存儲在文件或數據庫中,那么有人無法獲取密鑰並解密我的文件嗎?

是的,有人可以做到。

Maybe I am missing something, but is there a way to generate a key using a supplied pass phrase?

您無需通過密碼使用密鑰。 通常,您執行以下操作:

  1. 密鑰生成
  2. 使用從密碼短語派生的對稱密鑰對生成的密鑰進行加密

為何有人必須將生成的密鑰存儲在其他地方,而又不想使用密鑰呢?

可能有幾個原因。 例如,您可以將密鑰存儲在可移動設備中,而您只需要將其連接到計算機以檢索密鑰,而無需輸入密碼。 擁有密碼短語也有其缺點:必須記住密碼短語,可以猜出密碼短語,如果密碼短語過長,可能會將其寫下來(然后將其存儲在文件中也是一樣的事情)

編輯:

要從密碼生成密鑰,請查看PBKDF2相關文章 )。

我認為有兩種情況:

  1. 您信任用戶-讓密鑰取決於某些輸入(密碼/密碼短語)。 並使用它加密/解密數據。

  2. 您不信任用戶-那么您就有麻煩了,您可能會混淆了加密/解密算法,但是只要將機制+密鑰存儲在設備上,就會遇到這個問題。

這適用於對稱和非對稱加密。

是的,可以使用密碼短語進行加密。

但首先,轉儲DES。 使用AES-128。

接受來自用戶的密碼短語,並使用SHA-256或SHA-512生成哈希。 將AES-128的哈希值修剪為128位。 請參閱這篇文章。

Java AES並使用我自己的密鑰

盡可能使用鹽。

關於密碼部分的存儲。 存儲哈希而不是密碼。 這樣,您可以防止攻擊者生成密鑰。 要求用戶輸入強密碼。 並且不要忘記您的鹽也必須非常濃。

因此,最后只存儲密碼的哈希值。 密碼未存儲,解密密鑰也將不存儲(在運行時生成)

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM