3 回答

TA貢獻1909條經(jīng)驗 獲得超7個贊
使用a CipherOutputStream或CipherInputStreama Cipher和你的FileInputStream/ FileOutputStream。
我建議像Cipher.getInstance("AES/CBC/PKCS5Padding")創(chuàng)建Cipher課程一樣。CBC模式是安全的,并且沒有針對非隨機明文的ECB模式的漏洞。它應(yīng)該存在于任何通用加密庫中,以確保高兼容性。
如果要使用相同的密鑰加密多個文件,請不要忘記使用由安全隨機生成器生成的初始化向量(IV)。您可以在密文開頭加上普通IV的前綴。它總是正好一個塊(16字節(jié))。
如果您想使用密碼,請確保使用良好的密鑰派生機制(查找基于密碼的加密或基于密碼的密鑰派生)。PBKDF2是最常用的基于密碼的密鑰派生方案,它存在于大多數(shù)Java運行時中,包括Android。請注意,SHA-1是一個有點過時的哈希函數(shù),但它在PBKDF2中應(yīng)該沒問題,并且目前提供最兼容的選項。
在編碼/解碼字符串時始終指定字符編碼,否則當平臺編碼與前一個編碼不同時,您將遇到麻煩。換句話說,不要使用String.getBytes()但使用String.getBytes(StandardCharsets.UTF_8)。
為了使其更安全,請通過在密文和IV上添加安全校驗和(MAC或HMAC)來添加加密完整性和真實性,最好使用不同的密鑰。如果沒有認證標簽,則可以以不能檢測到改變的方式改變密文。
請注意,CipherInputStream 可能 不會報告BadPaddingException,這包括BadPaddingException為經(jīng)過身份驗證的密碼生成,例如GCM。這將使流不兼容并且對于這種經(jīng)過驗證的密碼不安全。

TA貢獻1784條經(jīng)驗 獲得超8個贊
您可以使用java-aes-crypto或Facebook的隱藏
Java的AES-密碼
從回購報價中引用
一個簡單的Android類,用于加密和解密字符串,旨在避免大多數(shù)此類遭受的經(jīng)典錯誤。
Facebook的隱瞞
從回購報價中引用
Conceal提供簡單的Android API,用于執(zhí)行數(shù)據(jù)的快速加密和身份驗證
- 3 回答
- 0 關(guān)注
- 1051 瀏覽
添加回答
舉報