/*
* Copyright (C) 2014 Jason Fang ( ijasonfang@gmail.com )
*
* 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 ( ijasonfang@gmail.com )
*
* 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 ( ijasonfang@gmail.com )
*
* 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的工具类(带加密)的更多相关文章

  1. Android 分享一个SharedPreferences的工具类,方便保存数据

    我们平常保存一些数据,都会用到SharedPreferences,他是保存在手机里面的,具体路径是data/data/你的包名/shared_prefs/保存的文件名.xml, SharedPrefe ...

  2. SharedPreferences的工具类,使用起来方便、快捷

    SharedPreferences的工具类,使用起来方便.快捷:上代码:import android.content.Context;import android.content.SharedPref ...

  3. SharedPreferences的工具类

    import android.content.Context; import android.content.SharedPreferences; import android.content.Sha ...

  4. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  5. 自己用反射写的一个request.getParameter工具类

    适用范围:当我们在jsp页面需要接收很多值的时候,如果用request.getParameter(属性名)一个一个写的话那就太麻烦了,于是我想是 否能用反射写个工具类来简化这样的代码,经过1个小时的代 ...

  6. java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...

  7. 调用jdbc已经写成的方法----jdbc工具类抽取方式三

    package jdbc_demo3; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.R ...

  8. 调用jdbc已经写成的方法----jdbc工具类抽取方式二

    先创建db.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/web08?useUnicode=true& ...

  9. 调用jdbc已经写成的方法----jdbc工具类抽取方式一

    package web09; /*获取连接和释放资源的方法 */ import java.sql.Connection; import java.sql.DriverManager; import j ...

随机推荐

  1. Jemeter对Oracle数据库性能测试方法

    下载Oracle的jdbc数据库驱动包,注意Oracle数据库的版本,这里使用的是:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 ...

  2. AppServ的安装与配置

    AppServ是一个软件集合,包括Apache(HTTP服务器软件).PHP(网页程序设计语言).MySQL(数据库管理系统软件).phpMyAdmin(图形界面的数据库管理软件)四个组成部分.App ...

  3. 内核源码分析之linux内核栈(基于3.16-rc4)

    在3.16-rc4内核源码中,内核给每个进程分配的内核栈大小为8KB.这个内核栈被称为异常栈,在进程的内核空间运行时或者执行异常处理程序时,使用的都是异常栈,看下异常栈的代码(include/linu ...

  4. sqlserver 删掉日志文件ldf以后 救命语句

    sqlserver 删掉日志文件ldf以后  救命步骤: 先新建一个新数据库, 删掉新建的 .mdb 用想要还原的mdb覆盖 执行下面的语句 ALTER DATABASE 'DB_Core' SET ...

  5. ActiveX控件是什么?

    一.ActiveX的由来 ActiveX最初只不过是一个商标名称而已,它所涵盖的技术并不是各自孤立的,其中多数都与Internet和Web有一定的关联.更重要的是,ActiveX的整体技术是由Micr ...

  6. codeforces 631A Interview

    A. Interview time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. [iOS 多线程 & 网络 - 2.11] - ASI框架上传文件

    A.ASI的上传功能基本使用 1.实现步骤 (1)创建请求 使用ASIFormDataRequest (2)设置上传文件路径 (3)发送请求     2.上传相册相片 UIImagePickerCon ...

  8. UINavigationController切换controller动画设置

    http://blog.csdn.net/dabiaoyanjun/article/details/7774775 uinavigationcontrolleranimation在pushViewCo ...

  9. SOURCES的文件格式

    SOURCES的文件格式: TARGETNAME=drivername , -本参数用于指定生成的设备驱动程序名称(不需后缀名),所产生的文件 -为drivername.sys. TARGETPATH ...

  10. windows 花式装系统

    目录 一.安装系统前准备 准备U盘 准备好一个制作启动盘的软件 准备系统镜像 二.接下来先制作启动盘(以微PE为例) 三.插上u盘,调BIOS(BIOS即基本输入输出系统) 四.进入PE 五.开始安装 ...