写了个SharedPreferences的工具类(带加密)

/*

 * Copyright (C) 2014 Jason Fang ( [email protected] )

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



package fyc.framework.util;



import java.util.HashSet;

import java.util.Map;

import java.util.Set;



import android.annotation.TargetApi;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.preference.PreferenceManager;

import android.support.v4.util.ArrayMap;

import android.text.TextUtils;



/**

 * SharePreferences Tool

 * 

 * @author Jason Fang

 * @datetime 2014年12月5日 下午5:28:22

 */

public class PrefsUtils {

    static final boolean DEBUG = true;

    

    private static final String SECURITY_KEY = "iJasonfang";

    

    /**

     * Put Value

     * 

     * @param context

     * @param key

     * @param value

     * @return

     */

    public static boolean putValue(Context context, String key, Object value) {

        return putValue(context, null, key, value);

    }

    

    public static boolean putValue(Context context, String key, Object value, boolean[] keyValueEncrypt) {

        return putValue(context, null, key, value, keyValueEncrypt);

    }

    

    public static boolean putValue(Context context, String name, String key, Object value) {

        return putValue(context, name, key, value, new boolean[]{true, true});

    }

    

    public static boolean putValue(Context context, String name, String key, Object value, boolean[] keyValueEncrypt) {

        return putValue(context, name, key, value, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    public static boolean putValue(Context context, String name, String key, Object value, int mode, boolean[] keyValueEncrypt) {

        ArrayMap<String, Object> map = new ArrayMap<String, Object>();

        map.put(key, value);

        return putValue(context, name, map, keyValueEncrypt);

    }

    

    public static boolean putValue(Context context, String name, Map<String, Object> map, boolean[] keyValueEncrypt) {

        return putValue(context, name, map, Context.MODE_PRIVATE, keyValueEncrypt);

    }



    @TargetApi(11)

    @SuppressWarnings("unchecked")

    public static boolean putValue(Context context, String name, Map<String, Object> map, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }

        

        Editor editor = preferences.edit();

        for (Map.Entry<String, Object> entry : map.entrySet()) {

            String key = keyValueEncrypt[0] ? SecurityUtils.MD5(entry.getKey()) : entry.getKey();

            Object value = entry.getValue();

            

            if (keyValueEncrypt[1] && !(value instanceof Set)) {

                editor.putString(key, SecurityUtils.DESencrypt(String.valueOf(value), SECURITY_KEY));

            } else {

                if (value instanceof Boolean) {

                    editor.putBoolean(key, Boolean.parseBoolean(String.valueOf(value)));

                } else if (value instanceof Float) {

                    editor.putFloat(key, Float.parseFloat(String.valueOf(value)));

                } else if (value instanceof Integer) {

                    editor.putInt(key, Integer.parseInt(String.valueOf(value)));

                } else if (value instanceof Long) {

                    editor.putLong(key, Long.parseLong(String.valueOf(value)));

                } else if (value instanceof String) {

                    editor.putString(key, String.valueOf(value));

                } else if (value instanceof Set) {

                    if (keyValueEncrypt[1]) {

                        Set<String> sets = (Set<String>)value;

                        Set<String> tempSets = new HashSet<String>();

                        for (String s : sets) {

                            tempSets.add(SecurityUtils.DESencrypt(String.valueOf(s), SECURITY_KEY));

                        }

                        editor.putStringSet(key, tempSets);

                    } else {

                        editor.putStringSet(key, (Set<String>)value);

                    }

                } else {

                    throw new IllegalArgumentException("Value type is not support!");

                }

            }

        }

        return editor.commit();

    }

    

    /**

     * Remove Key

     * @param context

     * @param key

     */

    public static boolean removeKey(Context context, String key) {

        return removeKey(context, null, key);

    }

    

    public static boolean removeKey(Context context, String name, String key) {

        return removeKey(context, name, key, false);

    }

    

    public static boolean removeKey(Context context, String name, String key, boolean isKeyEncrypt) {

        return removeKey(context, name, key, Context.MODE_PRIVATE, isKeyEncrypt);

    }

    

    public static boolean removeKey(Context context, String name, String key, int mode, boolean isKeyEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }

        

        Editor editor = preferences.edit();

        editor.remove(isKeyEncrypt ? SecurityUtils.DESencrypt(key, SECURITY_KEY) : key);

        return editor.commit();

    }

    

    /**

     * Get String

     * 

     * @param context

     * @param key

     * @param defValue

     * @return

     */

    public static String getString(Context context, String key, String defValue) {

        return getString(context, null, key, defValue);

    }

    

    public static String getString(Context context, String name, String key, String defValue) {

        return getString(context, name, key, defValue, Context.MODE_PRIVATE, new boolean[]{true, true});

    }

    

    public static String getString(Context context, String name, String key, String defValue, boolean[] keyValueEncrypt) {

        return getString(context, name, key, defValue, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    public static String getString(Context context, String name, String key, String defValue, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }

        

        String value = preferences.getString(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValue);

        if (value.equals(defValue)) {

            return value;

        } else {

            return keyValueEncrypt[1] ? SecurityUtils.DESdecrypt(value, SECURITY_KEY) : value;

        }

    }

    

    /**

     * Get Int

     * 

     * @param context

     * @param key

     * @param defValue

     * @return

     */

    public static int getInt(Context context, String key, int defValue) {

        return getInt(context, null, key, defValue);

    }

    

    public static int getInt(Context context, String name, String key, int defValue) {

        return getInt(context, name, key, defValue, new boolean[]{true, true});

    }

    

    public static int getInt(Context context, String name, String key, int defValue, boolean[] keyValueEncrypt) {

        return getInt(context, name, key, defValue, Context.MODE_PRIVATE, keyValueEncrypt);

    }



    public static int getInt(Context context, String name, String key, int defValue, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }



        if (keyValueEncrypt[1]) {

            String value = getString(context, name, key, String.valueOf(defValue), mode, keyValueEncrypt);

            try {

                return Integer.valueOf(value);

            } catch (Exception e) {

                return defValue;

            }

        } else {

            return preferences.getInt(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValue);

        }

    }

    

    /**

     * Get Long

     * 

     * @param context

     * @param key

     * @param defValue

     * @return

     */

    public static long getLong(Context context, String key, long defValue) {

        return getLong(context, null, key, defValue);

    }

    

    public static long getLong(Context context, String name, String key, long defValue) {

        return getLong(context, name, key, defValue, new boolean[]{true, true});

    }

    

    public static long getLong(Context context, String name, String key, long defValue, boolean[] keyValueEncrypt) {

        return getLong(context, name, key, defValue, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    public static long getLong(Context context, String name, String key, long defValue, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }



        if (keyValueEncrypt[1]) {

            String value = getString(context, name, key, String.valueOf(defValue), mode, keyValueEncrypt);

            

            try {

                return Long.valueOf(value);

            } catch (Exception e) {

                return defValue;

            }

        } else {

            return preferences.getLong(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValue);

        }

    }

    

    /**

     * Get Float

     * 

     * @param context

     * @param key

     * @param defValue

     * @return

     */

    public static float getFloat(Context context, String key, float defValue) {

        return getFloat(context, null, key, defValue);

    }

    

    public static float getFloat(Context context, String name, String key, float defValue) {

        return getFloat(context, name, key, defValue, new boolean[]{true, true});

    }

    

    public static float getFloat(Context context, String name, String key, float defValue, boolean[] keyValueEncrypt) {

        return getFloat(context, name, key, defValue, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    public static float getFloat(Context context, String name, String key, float defValue, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }



        if (keyValueEncrypt[1]) {

            String value = getString(context, name, key, String.valueOf(defValue), mode, keyValueEncrypt);

            try {

                return Float.valueOf(value);

            } catch (Exception e) {

                return defValue;

            }

        } else {

            return preferences.getFloat(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValue);

        }

        

    }

    

    /**

     * boolean

     * 

     * @param context

     * @param key

     * @param defValue

     * @return

     */

    public static boolean getBoolean(Context context, String key, boolean defValue) {

        return getBoolean(context, null, key, defValue);

    }

    

    public static boolean getBoolean(Context context, String name, String key, boolean defValue) {

        return getBoolean(context, name, key, defValue, new boolean[]{true, true});

    }

    

    public static boolean getBoolean(Context context, String name, String key, boolean defValue, boolean[] keyValueEncrypt) {

        return getBoolean(context, name, key, defValue, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    public static boolean getBoolean(Context context, String name, String key, boolean defValue, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }

        

        if (keyValueEncrypt[1]) {

            String valueString = getString(context, name, key, String.valueOf(defValue), mode, keyValueEncrypt);

            try {

                return Boolean.valueOf(valueString);

            } catch (Exception e) {

                return defValue;

            }

        } else {

            return preferences.getBoolean(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValue);

        }

    }

    

    /**

     * StringSet

     * 

     * @param context

     * @param key

     * @param defValues

     * @return

     */

    public static Set<String> getStringSet(Context context, String key, Set<String> defValues) {

        return getStringSet(context, null, key, defValues);

    }

    

    public static Set<String> getStringSet(Context context, String name, String key, Set<String> defValues) {

        return getStringSet(context, name, key, defValues, new boolean[]{true, true});

    }

    

    public static Set<String> getStringSet(Context context, String name, String key, Set<String> defValues, boolean[] keyValueEncrypt) {

        return getStringSet(context, name, key, defValues, Context.MODE_PRIVATE, keyValueEncrypt);

    }

    

    /**

     * @param context

     * @param name

     * @param key

     * @param defValues

     * @param mode

     * @return

     */

    @TargetApi(11)

    public static Set<String> getStringSet(Context context, String name, String key, Set<String> defValues, int mode, boolean[] keyValueEncrypt) {

        SharedPreferences preferences = null;

        if (TextUtils.isEmpty(name)) {

            preferences = PreferenceManager.getDefaultSharedPreferences(context);

        } else {

            preferences = context.getSharedPreferences(name, mode);

        }

        Set<String> valueSet = preferences.getStringSet(keyValueEncrypt[0] ? SecurityUtils.MD5(key) : key, defValues);

        Set<String> tempValueSet = new HashSet<String>();

        for (String s : valueSet) {

            tempValueSet.add(SecurityUtils.DESdecrypt(s, SECURITY_KEY));

        }

        return tempValueSet;

    }

    

    private PrefsUtils(){/*Do not new me*/};

}

 加密工具类!

/*

 * Copyright (C) 2014 Jason Fang ( [email protected] )

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



package fyc.framework.util;



import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.UnsupportedEncodingException;

import java.math.BigInteger;

import java.security.MessageDigest;

import java.security.SecureRandom;

import java.util.zip.GZIPInputStream;

import java.util.zip.GZIPOutputStream;



import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

import javax.crypto.spec.DESedeKeySpec;



import android.annotation.SuppressLint;

import android.text.TextUtils;

import android.util.Base64;



/**

 * 加密工具类

 * @description 

 * @author Jason Fang

 * @created 2013年10月31日

 */

public class SecurityUtils {

    static final boolean DEBUG = true;

/** * MD5 * @param srcString * @return */ public static String MD5(String srcString) { if (TextUtils.isEmpty(srcString)) { throw new IllegalArgumentException("srcString cannot be null!"); } try { return MD5(srcString.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { return ""; } } public static String MD5(byte[] srcBytes) { if (srcBytes == null) { throw new IllegalArgumentException("bytes cannot be null!"); } try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(srcBytes); byte[] bytes = md.digest(); int i = 0; StringBuffer buffer = new StringBuffer(""); for (int offset = 0; offset < bytes.length; offset++) { i = bytes[offset]; if (i < 0) { i += 256; } if (i < 16) { buffer.append("0"); } buffer.append(Integer.toHexString(i)); } return buffer.toString(); } catch (Exception e) { if (DEBUG) Flog.e(e); } return ""; } /** * @param dataSource * @param password * @return */ public static String DESencrypt(String dataSource, String password) { return ConvertUtils.parseBytesToHexString(DESencrypt(dataSource.getBytes(), password)); } /** * @param data * @param password * @return */ public static String DESdecrypt(String data, String password) { byte[] bytes = DESdecrypt(ConvertUtils.parseHexStringToBytes(data), password); if (bytes == null) { return ""; } return new String(bytes); } private SecurityUtils() {/*Do not new me*/}; }

 ConvertUtils 

/*

 * Copyright (C) 2014 Jason Fang ( [email protected] )

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



package fyc.framework.util;



import java.io.UnsupportedEncodingException;

import java.text.NumberFormat;

import java.util.Arrays;

import java.util.Map;

import java.util.Set;



import android.content.Context;

import android.content.res.Resources;

import android.text.TextUtils;

import android.util.TypedValue;



/**

 * 转换工具集

 * @author Jason Fang

 * @datetime 2014年11月23日 上午11:22:25

 */

public class ConvertUtils {

    static final boolean DEBUG = false;
/** * byte[] to String * @param bytes * @return */ public static String parseBytesToHexString(byte[] bytes) { if (bytes == null) return ""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String x16 = Integer.toHexString(bytes[i]); if (x16.length() < 2) { sb.append("0" + x16); } else if (x16.length() > 2) { sb.append(x16.substring(x16.length() - 2)); } else { sb.append(x16); } } return sb.toString(); } /** * String to byte[] * @param intString * @return */ public static byte[] parseHexStringToBytes(String intString) { if (TextUtils.isEmpty(intString)) return null; if (intString.length() % 2 == 1) { intString = "0" + intString; } byte[] bytes = new byte[intString.length() / 2]; try { for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte)Integer.parseInt(intString.substring(i * 2, i * 2 + 2), 16); } if (DEBUG) Flog.i("===parseStringToBytes===" + bytes.toString()); return bytes; } catch (Exception e) { Flog.e(e); return null; } }
}

 

你可能感兴趣的:(写了个SharedPreferences的工具类(带加密))