概述
如果本地数据直接以明文的形式存储在手机上,是很不安全的。我们简单地谈谈MD5加密的java实现。
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位的散列值,用于确保信息传输完整一致。java封装了这种算法的实现。
下面是java代码的实现:
public static String encoder(String password){
StringBuffer buffer;
/** * 1,信息摘要器 */
MessageDigest digest= null;
try {
digest = MessageDigest.getInstance("md5");
/** * 2,变成byte数组 */
byte bytes[]=digest.digest(password.getBytes());
buffer=new StringBuffer();
/** * 3,每个byte位与8个二进制数做与运算 */
for(byte b:bytes){
int number=b & 0xff;
//int 类型转换为十六进制
String numberStr=Integer.toHexString(number);
if(numberStr.length()==1){
buffer.append("0");
}
buffer.append(numberStr);
}
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
}
实现了数据的加密,接下来就要实现数据的存储。在android中最常见的存储方式就是使用SharedPreferences和数据库。在这里我将SharedPreferences的用法封装成了一个类,如果在项目中多次使用,都要去实例化,多麻烦啊。
public class DataStore {
public SharedPreferences sp;
public Context context;
{
context=MyApplication.getContext();
/** * 第一个参数相当于文件的名称,第二个参数表示操作模式,MODE_PRIVATE表示只有当前的应用程序可以访问, * MODE_MULTI_PROCESS则表示可以被多个进程操作。一般情况下,我们选择第一个作为操作模式的参数。 */
sp=context.getSharedPreferences("config",context.MODE_PRIVATE);
}
/** * 写入字符串数据 * @param id * @param data */
public void writeString(String id,String data){
SharedPreferences.Editor editor=sp.edit();
editor.putString(id,data);
editor.commit();
}
/** * 读入字符串数据 * @param id * @return */
public String getStringData(String id){
/** * 第一个参数是存储数据时设置的id,第二个参数表示如果你要取出的数据不存在(比如你传的id就不存在,数据当然就不存在了), * 返回的值 */
String data=sp.getString(id,"");
return data;
}
}
这里用到了全局的Context,所以需要自定义一个Application。
public class MyApplication extends Application {
public static Context context;
public static Context getContext(){
return context;
}
@Override
public void onCreate() {
super.onCreate();
context=getApplicationContext();
}
}
自定义的Application一定要在清单文件中进行说明,在application标签下,添加:
android:name="utitls.MyApplication"
关于SharedPreferences存储数据,这里是以字符串为例的。当然也可以存储整型和布尔类型的数据。
转眼间,国庆假期就马上结束了,时光匆匆!