从保管箱解密图像并显示

我想解密照片,它将在我的三星Galaxy选项卡上显示它,我尝试了ByteArrayOutputStream,当我在我的模拟器中运行它时,当我从dropbox中随机下载照片时,它会显示内部错误。 这是为什么这样的? 或者我从保管箱调用了错误的路径? 有人帮我解决这个问题吗? 因为我已经尝试了很多方法来解决它但我仍然无法解决问题..

// Now pick a random one int index = (int)(Math.random() * thumbs.size()); Entry ent = thumbs.get(index); String path = ent.path; mFileLen = ent.bytes; String cachePath = mContext.getCacheDir().getAbsolutePath() + "/" + IMAGE_FILE_NAME; try { KeyGenerator keygen = KeyGenerator.getInstance("DES"); SecretKey key = keygen.generateKey(); //generate key byte[] encryptedData; byte[] decryptedData; Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); //File f = new File(encryptfilepath); FileInputStream in = new FileInputStream(cachePath); encryptedData = new byte[(int)cachePath.length()]; in.read(encryptedData); decryptedData = cipher.doFinal(encryptedData); ByteArrayOutputStream fis = new ByteArrayOutputStream(decryptedData); //ByteArrayInputStream fis = new ByteArrayInputStream(decryptedData); mFos = new FileOutputStream(new File(fis)); // mFos = new FileOutputStream(cachePath); } catch (FileNotFoundException e) { mErrorMsg = "Couldn't create a local file to store the image"; 

这是我加密图片的一部分。

 KeyGenerator keygen = KeyGenerator.getInstance("DES"); SecretKey key = keygen.generateKey(); //generate key //encrypt file here first byte[] plainData; byte[] encryptedData; Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); FileInputStream in = new FileInputStream(mFile); //obtains input bytes from a file plainData = new byte[(int)mFile.length()]; in.read(plainData); //Read bytes of data into an array of bytes encryptedData = cipher.doFinal(plainData); //encrypt data ByteArrayInputStream fis = new ByteArrayInputStream(encryptedData); //save encrypted file to dropbox // By creating a request, we get a handle to the putFile operation, // so we can cancel it later if we want to // FileInputStream fis = new FileInputStream(mFile); String path = mPath + mFile.getName(); mRequest = mApi.putFileOverwriteRequest(path, fis, mFile.length(), new ProgressListener() { 

尝试使用

 ByteArrayInputStream fis = new ByteArrayInputStream(encryptedData); 

输出流用于写入 ,输入流用于读取。 您希望Dropbox API从您的字节读取 ,对吧?

如果您坚持先将加密数据写入本地硬盘 ,那么您可能需要使用File.createTempFile