文档章节

android 视频 加密/解密(使用AES)

oldfeel
 oldfeel
发布于 2014/02/17 15:37
字数 499
阅读 4321
收藏 14

java语言进行加密解密速度挺慢的。。一个6MB左右的文件需要10多秒。。。等有空了瞅瞅ffmpeg去。。

MainActivity.java

/**
 * 视频加密/解密
 * 
 * @author oldfeel
 * 
 *         Created on: 2014-2-17
 */
public class MainActivity extends Activity {
	// 原文件
	private static final String filePath = "/sdcard/DCIM/Camera/VID_20140217_144346.mp4";
	// 加密后的文件
	private static final String outPath = "/sdcard/DCIM/Camera/encrypt.mp4";
	// 加密再解密后的文件
	private static final String inPath = "/sdcard/DCIM/Camera/decrypt.mp4";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button encryptButton = (Button) findViewById(R.id.main_encrypt);
		Button DecryptButton = (Button) findViewById(R.id.main_decrypt);
		encryptButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					encrypt();
					Toast.makeText(getApplicationContext(), "加密完成",
							Toast.LENGTH_SHORT).show();
				} catch (InvalidKeyException e) {
					e.printStackTrace();
				} catch (NoSuchAlgorithmException e) {
					e.printStackTrace();
				} catch (NoSuchPaddingException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});

		DecryptButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					decrypt();
					Toast.makeText(getApplicationContext(), "解密完成",
							Toast.LENGTH_SHORT).show();
				} catch (InvalidKeyException e) {
					e.printStackTrace();
				} catch (NoSuchAlgorithmException e) {
					e.printStackTrace();
				} catch (NoSuchPaddingException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Here is Both function for encrypt and decrypt file in Sdcard folder. we
	 * can not lock folder but we can encrypt file using AES in Android, it may
	 * help you.
	 * 
	 * @throws IOException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeyException
	 */

	static void encrypt() throws IOException, NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeyException {
		// Here you read the cleartext.
		FileInputStream fis = new FileInputStream(filePath);
		// This stream write the encrypted text. This stream will be wrapped by
		// another stream.
		FileOutputStream fos = new FileOutputStream(outPath);
		// Length is 16 byte
		SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".getBytes(),
				"AES");
		// Create cipher
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.ENCRYPT_MODE, sks);
		// Wrap the output stream
		CipherOutputStream cos = new CipherOutputStream(fos, cipher);
		// Write bytes
		int b;
		byte[] d = new byte[8];
		while ((b = fis.read(d)) != -1) {
			cos.write(d, 0, b);
		}
		// Flush and close streams.
		cos.flush();
		cos.close();
		fis.close();
	}

	static void decrypt() throws IOException, NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeyException {
		FileInputStream fis = new FileInputStream(outPath);
		FileOutputStream fos = new FileOutputStream(inPath);
		SecretKeySpec sks = new SecretKeySpec("oldfeelwasverynb".getBytes(),
				"AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, sks);
		CipherInputStream cis = new CipherInputStream(fis, cipher);
		int b;
		byte[] d = new byte[8];
		while ((b = cis.read(d)) != -1) {
			fos.write(d, 0, b);
		}
		fos.flush();
		fos.close();
		cis.close();
	}

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/main_encrypt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="147dp"
        android:text="Encrypt" />

    <Button
        android:id="@+id/main_decrypt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/main_encrypt"
        android:layout_centerVertical="true"
        android:text="Decrypt" />

</RelativeLayout>

AndroidManifest.xml要添加读取sd的权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


本文转载自:http://khurramitdeveloper.blogspot.com/2013/08/encryption-decryption-in-android.html

oldfeel
粉丝 45
博文 78
码字总数 17297
作品 0
防城港
个人站长
私信 提问
加载中

评论(4)

陈守印
陈守印

引用来自“王宏雷”的评论

怎么运行起来没效果啊
推荐看看 #AES 128/192/256位CBC/CFB/ECB/OFB/PCBC加密解密# ,这里有完整的源码
http://www.it399.com/blog/web/201805211243
陈守印
陈守印

引用来自“侯永奇”的评论

加密和解密运行一样的,代码都一样的好吧。
可以试试 在线助手的 aes在线加密功能 http://www.it399.com/aes
侯永奇
加密和解密运行一样的,代码都一样的好吧。
王宏雷
王宏雷
怎么运行起来没效果啊
Android安全防护防护———加密算法

摘要 这篇文章本来早就应该写了,但是由于项目一直开发新的需求,就拖后了。现在有时间了,必须得写了。现在Android应用程序对安全防范这方面要求越来越高了。特别是金融行业,如果金融app没...

北辰丨丶
02/21
0
0
数据MD5+base64、AES+RSA加密原理

在服务器与终端设备进行HTTP通讯时,常常会被网络抓包、反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数。为了确保信息的安全,我们必须进行接口参数加密和解密。本文只讲...

朝雨晚风
2016/07/14
0
0
Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C
2018/05/08
0
0
通过 JNI 调用 OpenSSL 实现加密解密

Intel® Developer Zone 为跨平台app开发提供工具和信息指引,平台和技术信息,示例代码,以及同行专家来帮助开发者创新和成功。加入我们的 Android, Internet of Things, Intel® RealSens...

oschina
2015/02/13
7K
2
使用AES加密进行Android的SharedPreferences存储

1.概述 SharedPreferences是Android提供用来存储一些简单配置信息的机制,其以KEY-VALUE对的方式进行存储,以便我们可以方便进行读取和存储。主要可以用来存储应用程序的欢迎语、常量参数或登...

尼莫
2013/01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
3
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
4
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部