Android 扩展基本EditTextPreference和加密/解密
多亏了dmon和这里的例子 我能记下基本代码。但是我的值没有被加密存储在设备上的preferences.xml中,我知道这对java新手来说是一个简单的错误 我的加密和解密类在EditTextPreference代码之外工作 亲切问候, 迈克 My preferences.xmlAndroid 扩展基本EditTextPreference和加密/解密,android,encryption,passwords,preferences,Android,Encryption,Passwords,Preferences,多亏了dmon和这里的例子 我能记下基本代码。但是我的值没有被加密存储在设备上的preferences.xml中,我知道这对java新手来说是一个简单的错误 我的加密和解密类在EditTextPreference代码之外工作 亲切问候, 迈克 My preferences.xml <ping.test.com.EncryptedEditTextpreference android:key="key" android:summary="Enter
<ping.test.com.EncryptedEditTextpreference
android:key="key"
android:summary="Enter Your Public Key"
android:title="Public Key"
android:inputType="textPassword"/>
</PreferenceCategory>
首先,我知道拥有首选项视图很方便,但在您的特殊情况下,我更愿意使用简单的EditText并将首选项手动保存在其中 回答你的问题:根据文件,它应该有效,你已经尝试了什么。要更接近错误,请尝试添加如下日志:
@Override
public void setText(String text) {
Log.v("setText", "from " + text);
try {
String to = SimpleCrypto.encrypt("BiteMe", text );
Log.v("setText", "to " + to);
super.setText(to);
} catch (Exception e) {
e.printStackTrace();
}
}
验证SimpleCrypt类是否按预期工作,并且可以向EditText中添加一个,并将其记录下来,以查看发生了什么
请注意,这可能是usafe,因为攻击者能够反编译您的apk并查看此加密的工作原理 首先,我知道拥有首选项视图很方便,但在您的特殊情况下,我更愿意使用简单的EditText并将首选项手动保存在其中 回答你的问题:根据文件,它应该有效,你已经尝试了什么。要更接近错误,请尝试添加如下日志:
@Override
public void setText(String text) {
Log.v("setText", "from " + text);
try {
String to = SimpleCrypto.encrypt("BiteMe", text );
Log.v("setText", "to " + to);
super.setText(to);
} catch (Exception e) {
e.printStackTrace();
}
}
验证SimpleCrypt类是否按预期工作,并且可以向EditText中添加一个,并将其记录下来,以查看发生了什么
请注意,这可能是usafe,因为攻击者能够反编译您的apk并查看此加密的工作原理 在显示设置时不显示加密值,因为我屏蔽了pswd。我只想在存储时加密
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if (!restoreValue) {
super.setText((String) defaultValue);
}
else {
try {
String decrypted = SimpleCrypto.decrypt(Constants.MasterKey, getPersistedString(null));
super.setText(decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}
显示设置时不显示加密值,因为我屏蔽了pswd。我只想在存储时加密
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if (!restoreValue) {
super.setText((String) defaultValue);
}
else {
try {
String decrypted = SimpleCrypto.decrypt(Constants.MasterKey, getPersistedString(null));
super.setText(decrypted);
} catch (Exception e) {
e.printStackTrace();
}
}
}
好的,我来看看日志。。我理解对设备的物理访问是一个问题,但不确定对于用户不想连续输入密码的应用程序,还应该做些什么,我想至少不会是明文。用户第一次运行应用程序时,可以生成一个随机salt来加密数据:java.util.UUDI.randomuid.toString。为了更安全,您可以使用,快速且简单:-为了确保用户无法清除首选项中包含您的salt的数据,请在标记应用程序AndroidManifest.xml中使用此标志:android:ManageSpace activity=您的假活动。@haibison salt实际上不会改变任何内容,因为用户至少在手机根目录下可以访问它!但这不是一个如何实现安全性的问题。@Rafael,谢谢,我误解了salt的概念。太好了,我来看看日志。。我理解对设备的物理访问是一个问题,但不确定对于用户不想连续输入密码的应用程序,还应该做些什么,我想至少不会是明文。用户第一次运行应用程序时,可以生成一个随机salt来加密数据:java.util.UUDI.randomuid.toString。为了更安全,您可以使用,快速且简单:-为了确保用户无法清除首选项中包含您的salt的数据,请在标记应用程序AndroidManifest.xml中使用此标志:android:ManageSpace activity=您的假活动。@haibison salt实际上不会改变任何内容,因为用户至少在手机根目录下可以访问它!但这不是一个如何实现安全性的问题。@Rafael,谢谢,我误解了salt的概念。我试图在类中扩展EditTextPreference,我得到了以下错误。“android.preference.EditTextPreference”中没有可用的默认构造函数。如何解决此问题?我正在尝试在类中扩展EditTextPreference,但出现以下错误。“android.preference.EditTextPreference”中没有可用的默认构造函数。如何解决这个问题?