Android 视频&文件,加密 解密
来源:互联网 发布:js自动计算日期时间差 编辑:程序博客网 时间:2024/05/18 01:17
播放视频的时候 没有做 播放一个 解密一个,在加密上一个
进入播放器解密所有视频文件 离开播放器 加密所有视频文件
如果播放失败 可能加密状态错误 调用cleanLock
SPUtils 是一个保存文字到本地 工具类
Application 全局public static List<String> songLock = new ArrayList<>(); //加密的儿歌 /** * 视频文件 下载完成时调用 * 加密单个视频 * @param path */ public void lock(String path) { //判断是否重复加密 if (addList(path)) { System.out.println("-------------加密该视频"); encrypt(path); } else { System.out.println("-------------加密重复"); } } /*** * 解密单个视频 * * @param path */ public void openLock(String path) { //判断是否重复解密 if (deleteList(path)) { System.out.println("-------------解密该视频"); encrypt(path); } else { System.out.println("-------------解密视频未加密"); } } /*** * 加密所有文件 * 退出视频播放器的 时候 加密所有本地 文件 */ public void lockAll() { System.out.println("--------------全部枷锁"); //获取全部本地路径 //遍历加密每一条本地路径 for () { lock(); } } /*** * 进入播放器 调用 解锁所有本地文件 * 视频播放器 播放的是一个列表文件 * 解锁所有本地文件 */ public void openLockAll() { System.out.println("--------------全部解锁"); //获取全部本地路径 //遍历加密每一条本地路径 for () { openLock(); } } /*** * 播放器 播放失败时 调用 * 在视频播放器 播放失败 * 可能这首音乐加解密状态错误(加密状态) * 在调用一边 取消该视频加密 * 暂时 不加密此视频 * * @param path */ public void cleanLock(String path) { if (SPUtils.contains(MyApplication.getInstance(), "lock") && SPUtils.getAll(MyApplication.getInstance()).get("lock") != null) { String str = SPUtils.getAll(MyApplication.getInstance()).get("lock").toString(); MyApplication.songLock.clear(); MyApplication.songLock = StringToList(str); } if (MyApplication.songLock.contains(path)) { MyApplication.songLock.remove(path); } encrypt(path); } /** * 加解密 * * @param strFile 源文件绝对路径 * @return */ public boolean encrypt(String strFile) { final int REVERSE_LENGTH = 100; int len = REVERSE_LENGTH; try { File f = new File(strFile); RandomAccessFile raf = new RandomAccessFile(f, "rw"); long totalLen = raf.length(); if (totalLen < REVERSE_LENGTH) len = (int) totalLen; FileChannel channel = raf.getChannel(); MappedByteBuffer buffer = channel.map( FileChannel.MapMode.READ_WRITE, 0, REVERSE_LENGTH); byte tmp; for (int i = 0; i < len; ++i) { byte rawByte = buffer.get(i); tmp = (byte) (rawByte ^ i); buffer.put(i, tmp); } buffer.force(); buffer.clear(); channel.close(); raf.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /*** * 判断当前视频 是否重复加密 * 没加密过 true * 加密过 false * * @param path * @return */ private boolean addList(String path) { boolean b = false; if (SPUtils.contains(MyApplication.getInstance(), "lock") && SPUtils.getAll(MyApplication.getInstance()).get("lock") != null) { String str = SPUtils.getAll(MyApplication.getInstance()).get("lock").toString(); MyApplication.songLock.clear(); MyApplication.songLock = StringToList(str); } if (!MyApplication.songLock.contains(path)) { MyApplication.songLock.add(path); System.out.println("要保存的是" + listToString(MyApplication.songLock)); SPUtils.put(MyApplication.getInstance(), "lock", listToString(MyApplication.songLock)); b = true; } System.out.println("已经加密的数据" + listToString(MyApplication.songLock)); return b; } /*** * 当前视频 是否被加密 * 加密 true 可以解密 * 未加密 false * * @param path * @return */ private boolean deleteList(String path) { boolean b = true; if (SPUtils.contains(MyApplication.getInstance(), "lock") && SPUtils.getAll(MyApplication.getInstance()).get("lock") != null) { String str = SPUtils.getAll(MyApplication.getInstance()).get("lock").toString(); MyApplication.songLock.clear(); MyApplication.songLock = StringToList(str); } if (MyApplication.songLock.contains(path)) { MyApplication.songLock.remove(path); SPUtils.put(MyApplication.getInstance(), "lock", listToString(MyApplication.songLock)); b = true; } else { b = false; } return b; } /*** * List转String * * @param stringList * @return */ public static String listToString(List<String> stringList) { if (stringList == null) { return null; } StringBuilder result = new StringBuilder(); boolean flag = false; for (String string : stringList) { if (flag) { result.append(","); } else { flag = true; } result.append(string); } return result.toString(); } /*** * String 转List * * @param s * @return */ public static List<String> StringToList(String s) { List<String> Slist = new ArrayList<>(); String[] ary = s.split(",");//调用API方法按照逗号分隔字符串 for (String ss : ary) { Slist.add(ss); } return Slist; }
SPUtils 工具类
public class SPUtils { /** * 保存在手机里面的文件名 */ public static final String FILE_NAME = "share_data"; /** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 * * @param context * @param key * @param object */ public static void put(Context context, String key, Object object) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (object instanceof String) { editor.putString(key, (String) object); } else if (object instanceof Integer) { editor.putInt(key, (Integer) object); } else if (object instanceof Boolean) { editor.putBoolean(key, (Boolean) object); } else if (object instanceof Float) { editor.putFloat(key, (Float) object); } else if (object instanceof Long) { editor.putLong(key, (Long) object); } else if (object instanceof Set) { editor.putStringSet(key, (Set<String>) object); } else { editor.putString(key, object.toString()); } SharedPreferencesCompat.apply(editor); } /** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param context * @param key * @param defaultObject * @return */ public static Object get(Context context, String key, Object defaultObject) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); if (defaultObject instanceof String) { return sp.getString(key, (String) defaultObject); } else if (defaultObject instanceof Integer) { return sp.getInt(key, (Integer) defaultObject); } else if (defaultObject instanceof Boolean) { return sp.getBoolean(key, (Boolean) defaultObject); } else if (defaultObject instanceof Float) { return sp.getFloat(key, (Float) defaultObject); } else if (defaultObject instanceof Long) { return sp.getLong(key, (Long) defaultObject); } else if (defaultObject == null) { return sp.getStringSet(key, null); } return null; } /** * 移除某个key值已经对应的值 * * @param context * @param key */ public static void remove(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); SharedPreferencesCompat.apply(editor); } /** * 清除所有数据 * * @param context */ public static void clear(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); SharedPreferencesCompat.apply(editor); } /** * 查询某个key是否已经存在 * * @param context * @param key * @return */ public static boolean contains(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); return sp.contains(key); } /** * 返回所有的键值对 * * @param context * @return */ public static Map<String, ?> getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, MODE_PRIVATE); return sp.getAll(); } /** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 * * @author zhy */ private static class SharedPreferencesCompat { private static final Method sApplyMethod = findApplyMethod(); /** * 反射查找apply的方法 * * @return */ @SuppressWarnings({"unchecked", "rawtypes"}) private static Method findApplyMethod() { try { Class clz = SharedPreferences.Editor.class; return clz.getMethod("apply"); } catch (NoSuchMethodException e) { } return null; } /** * 如果找到则使用apply执行,否则使用commit * * @param editor */ public static void apply(SharedPreferences.Editor editor) { try { if (sApplyMethod != null) { sApplyMethod.invoke(editor); return; } } catch (IllegalArgumentException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } editor.commit(); } }}
阅读全文
0 0
- Android 视频&文件,加密 解密
- android视频加密解密
- Android AES 文件加密解密
- Android AES 文件加密解密
- Android AES 文件加密解密
- android或java,加密解密文件
- Android文件的加密与解密
- Android 文件的加密及解密
- 图片,音频,视频的文件加密,解密,保护自身资源
- 完成的一个android视频加密解密播放的案例
- 文件加密解密 URl参数加密解密
- c#加密解密文件
- c#加密解密文件
- 文件DES加密解密
- .config文件加密解密
- 文件加密解密
- 如何加密解密文件
- 文件加密解密演示
- 正则表达式
- 机器学习实战读书笔记-朴素贝叶斯
- VirtualBox5.1.24克隆CentOS-6.5设置
- Android AS插件ParcelableGenerator介绍以及使用
- 简单js实现选项卡
- Android 视频&文件,加密 解密
- 并查集
- typeof()和匿名函数
- 阿里云IOT Python SDK
- [python学习]Turtle库
- cpp primer plus中一些有意思的题目
- NYOJ469
- Latex数学公式中的空格
- H5播放器内置播放视频(兼容绝大多数安卓和ios)