/*
* 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. Windows7 64位系统下无法安装网络打印机的解决方法

    背景: 公司一台HP LaserJet 1010 打印机连在一台Windows XP的电脑上,而我的是windows7 64位系统,无法安装驱动解决办法:1:去惠普官网上下载对应的64位驱动(什么Vi ...

  2. WordPress的SEO技术

    原文:http://blog.wpjam.com/article/wordpress-seo/ 文章目录[隐藏] 内容为王 页面优化 标题 链接(URL) Meta 标签 语义化 H1 H2 H3 等 ...

  3. java 复习003 之排序篇

    由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...

  4. 使用Async同步执行异步函数

    为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱. 我有一个类似下面代码的场景,依据数组中的每一个元素执行一个 ...

  5. eucalyptus,openNebula云构建漫谈

    Eucalyptus篇 万事在于理解,技术研究贵在入脑入心.生活很苦,乐趣何在,在于君心?不能修心,则诸事繁杂!闲来无事,阅读官网文档遇此 two Why selecter?因此分享给亲们!亲,那么我 ...

  6. Homework-10 BASIC

    对于本次作业: 我的整体思路如下: 1.首先修改二维数组求最大子数组和的C语言代码,加入分步骤的当前最优解边界值,局部最优解的记录,使之支持分步执行,连续执行,回滚等功能. 2.将程序改写为Javas ...

  7. 修改Oracle 10g Express Edition默认的8080端口

    http://sucre.blog.51cto.com/1084905/475531 ————————————————————————————————————————————————————————— ...

  8. FIREDAC连接SQLITE乱码的解决

    在好多群里面都碰到问“FIREDAC连接SQLITE乱码的”的问题的同仁,遂将解决方法贴出来: 如上图所示设置 stringFormat为unicode即可

  9. EasyUI datagrid添加右键菜单项

    js代码 //动态加载数据表格 function InitData() { $('#grid').datagrid({ url: '/Home/Query?r=' + Math.random(), / ...

  10. MYCAT介绍

    为什么需要MyCat? http://www.mycat.org.cn/ http://www.csdn.net/article/2015-07-16/2825228