1,MessageDigest类用于为应用程序提供信息摘要算法功能,比如md5或者sha算法。简单点说就是用于生成散列码。MessageDigest通过其getInstance静态函数进行实例化和初始化。MessageDigest通过使用update方法处理数据。任何时候都可以调用reset方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest方法之一完成哈希计算并返回结果
/** * 创建文件夹 * @param context 上下文 * @param uniqueName 文件夹 * @return */ public File getDisCacherDir(Context context,String uniqueName){ String path = null; //判断是否存在SD卡 if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ //获取外部SD卡路径,sdcard/Android/包名/cache/ path = context.getExternalCacheDir().getPath(); }else{ //获取内部SD卡路径,data/data/包名/cache/ path = context.getCacheDir().getPath(); } //File.separator表示/ File file = new File(path+File.separator+uniqueName); //是否存在该文件 if(!file.exists()){ //创建文件 file.mkdirs(); } return file; } /** * 获取APP版本号 * @param context 上下文 * @return */ public int getAppVersion(Context context){ try { //获取包信息 PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),0); //返回版本号 return packageInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return 0; } /** * MD5加密 * @param key * @return */ public String hashKeyForDisk(String key){ String hashkey = null; try { //实例化MD5散列码 MessageDigest messageDigest = MessageDigest.getInstance("MD5"); //处理数据 messageDigest.update(key.getBytes()); //返回处理数据结果 byte[] digest = messageDigest.digest(); hashkey = bytesToHexString(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); hashkey = String.valueOf(key.hashCode()); } return hashkey; } /** * 字节数组转换16进制字符串 * @param digest 字节数组 * @return */ public String bytesToHexString(byte[] digest){ StringBuffer stringBuffer = new StringBuffer(); for(int i=0;i<digest.length;i++){ // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制 String hexString = Integer.toHexString(0xff & digest[i]); // 每个字节8位,转为16进制标志,2个16进制位 if(hexString.length() == 1){ stringBuffer.append(0); } stringBuffer.append(hexString); } return stringBuffer.toString(); }