我目前正在製作一個應用程序,需要在J2ME中保存敏感數據,無論是RMS還是使用LWUIT的存儲類。 (例如用戶名和密碼)在J2ME中如何保存敏感數據?
這樣的實施有多安全,以及爲確保數據的安全性和不易被盜用而採取的步驟?
我目前正在製作一個應用程序,需要在J2ME中保存敏感數據,無論是RMS還是使用LWUIT的存儲類。 (例如用戶名和密碼)在J2ME中如何保存敏感數據?
這樣的實施有多安全,以及爲確保數據的安全性和不易被盜用而採取的步驟?
RMS未加密 - 攻擊者可以輕鬆讀取任何數據。您需要對數據進行加密 - 我推薦使用Bouncycastle AES提供程序,但Java AES提供程序也可以使用(儘管效率不高,而且您將使用need to enable 256-bit keys)。 See the accepted answer to this question for some example code,我不建議更改代碼中的任何內容,而不要求先問StackOverflow或其他好的Q &網站(這很容易錯誤地使用加密庫);代碼使用Java加密提供程序在導入Bouncycastle庫後使用Bouncycastle提供程序使用Cipher.getInstance("AES/CBC/PKCS7Padding", new BouncyCastleProvider())
。需要注意的是,代碼從char[] password
生成Keyspec spec
- 用戶需要在每個會話中至少輸入一次該密碼,以便解密數據(不能在設備上存儲密碼,這會失敗加密數據的目的)。同樣重要的是,您需要在加密和解密階段使用相同的IV(初始化向量);這個IV應該對你正在加密的每條記錄都是唯一的(例如,當你加密foo.txt,然後使用與加密bar.txt時不同的IV),但它不需要是祕密的(你可以將它存儲爲明文與加密文件一起)。作爲一項額外的預防措施,請在完成後擦除char[] password
。