当前位置: 移动技术网 > IT编程>移动开发>Android > android实现视频的加密和解密(使用AES)

android实现视频的加密和解密(使用AES)

2019年07月24日  | 移动技术网IT编程  | 我要评论

老汉进小巷后失联,mc赵小磊,郭德纲 王半仙

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网