android 加解密的速度和什么有关系,android实现视频的加密和解密(使用AES)

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

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" >

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" />

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" />

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值