android java文件优化_java – 加密和解密Android内部文件的任何优化方式

这是当前用于加密和解密过程的代码,它的工作方式也是如此,除了加密和解密的时间很长.

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.crypto.Cipher;

import javax.crypto.CipherInputStream;

import javax.crypto.CipherOutputStream;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

public class EncryptAndDecrypt{

public static void main(String[] args) {

try {

String key = "myencryptedpass123";

FileInputStream fis = new FileInputStream("File_to_encrypt.mp4");

FileOutputStream fos = new FileOutputStream("Encrypted_file.mp4");

encrypt(key, fis, fos);

FileInputStream fis2 = new FileInputStream("Encrypted_file.mp4");

FileOutputStream fos2 = new FileOutputStream("File_to_decrypt.mp4");

decrypt(key, fis2, fos2);

} catch (Throwable e) {

e.printStackTrace();

}

}

public static void encrypt(String key, InputStream is, OutputStream os) throws Throwable {

encryptOrDecrypt(key, Cipher.ENCRYPT_MODE, is, os);

}

public static void decrypt(String key, InputStream is, OutputStream os) throws Throwable {

encryptOrDecrypt(key, Cipher.DECRYPT_MODE, is, os);

}

public static void encryptOrDecrypt(String key, int mode, InputStream is, OutputStream os) throws Throwable {

DESKeySpec dks = new DESKeySpec(key.getBytes());

SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");

SecretKey desKey = skf.generateSecret(dks);

Cipher cipher = Cipher.getInstance("DES");

if (mode == Cipher.ENCRYPT_MODE) {

cipher.init(Cipher.ENCRYPT_MODE, desKey);

CipherInputStream cis = new CipherInputStream(is, cipher);

doCopy(cis, os);

} else if (mode == Cipher.DECRYPT_MODE) {

cipher.init(Cipher.DECRYPT_MODE, desKey);

CipherOutputStream cos = new CipherOutputStream(os, cipher);

doCopy(is, cos);

}

}

public static void doCopy(InputStream is, OutputStream os) throws IOException {

byte[] bytes = new byte[64];

int numBytes;

while ((numBytes = is.read(bytes)) != -1) {

os.write(bytes, 0, numBytes);

}

os.flush();

os.close();

is.close();

}

}

现在我希望有一个更好的解决方案……

最佳答案 绝对使用更大的缓冲区,但加密主要是CPU绑定的,所以它不太可能变得更快.另外

>如果你“不打扰安全漏洞”,最好完全放弃加密

>你正在使用DES,不是

>你使用人类可读的字符串作为键 – 不要

>使用单独的Cipher实例进行加密和解密后,该代码可能无效

>如果你使用的是默认值,那么你就是在为自己设置麻烦.使用Cipher.getInstance(“AES / CBC / PKCS5Padding”)之类的东西

>如果您希望在Android上运行,为什么要在桌面上进行测试?

是的,如果您在应用程序中包含密钥,那么您的“DRM”就没有多大用处.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值