Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 扩展基本EditTextPreference和加密/解密_Android_Encryption_Passwords_Preferences - Fatal编程技术网

Android 扩展基本EditTextPreference和加密/解密

Android 扩展基本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

多亏了dmon和这里的例子

我能记下基本代码。但是我的值没有被加密存储在设备上的preferences.xml中,我知道这对java新手来说是一个简单的错误

我的加密和解密类在EditTextPreference代码之外工作

亲切问候,

迈克

My preferences.xml

    <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”中没有可用的默认构造函数。如何解决这个问题?