2015-01-07 11 views
5

私のアプリにダウンロードしたファイルの暗号化/復号化メカニズムがあります。アンドロイドロリポップの暗号化されたファイルを解読できません

このメカニズムは、アンドロイド5.0-lollipopより前のすべてのアンドロイドデバイスとバージョンで機能します。ここで

は、復号化プロセスである:

cipher.init(Cipher.DECRYPT_MODE, key); 
fileInputStream = new FileInputStream(file); 
cipherInputStream = new CipherInputStream(fileInputStream, cipher); 
byte[] fileByte = new byte[(int) file.length()]; 
int j = cipherInputStream.read(fileByte); 
return fileByte; 

暗号と鍵が前に生成し、全アプリケーションで使用されています。

key = new SecretKeySpec(keyValue, "AES"); 
try { 
    cipher = Cipher.getInstance("AES"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

私はアンドロイド5.0で200,000バイトのファイルを復号化するとき、jは(返される前の変数)は約8000で、これは200000よりはるかに低いですが、古いアンドロイド版では暗号化されたファイルの長さとまったく同じです。

問題が解読されていることがわかりました。アンドロイド5.0でファイルを暗号化して、古いアンドロイド版で解読できるので、逆も同様です。しかし、私が投稿しています暗号化プロセス:事前に

cipher.init(Cipher.ENCRYPT_MODE, AESutil.key); 
cipherOutputStream = new CipherOutputStream(output, cipher); 
byte data[] = new byte[1024]; 
int count; 
while ((count = input.read(data)) != -1) { 
    cipherOutputStream.write(data, 0, count); 
} 

おかげ

+0

あなたのストリームに私のaplicationディレクトリへの文字列であります私にとってかなり扱いやすいようです。ファイルのサイズのバッファを作成しても、それらのバイトがすべて実際に読み取られるわけではありません。暗号化中にストリームを明示的にクローズしているようには見えません(しかし、これは単に含まれていないかもしれません)。 –

+0

@ MaartenBodewes-owlsteadはい私はそれらを閉じました。問題は依然として存在します。 –

+0

'j'が' -1'になるまでバイトを読むことで、適切な量のバイトも読み込むことができますか? –

答えて

2

マイ暗号の例(L):

APPPATHは、SDカード

static void encrypt(File file, String pass) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 


     FileInputStream fis = new FileInputStream(file); 


     FileOutputStream fos = new FileOutputStream(APPPATH+"/E_"+file.getName()); 


     SecretKeySpec sks = new SecretKeySpec(pass.getBytes(), "AES"); 

     Cipher cipher = Cipher.getInstance("AES"); 
     cipher.init(Cipher.ENCRYPT_MODE, sks); 

     CipherOutputStream cos = new CipherOutputStream(fos, cipher); 

     int b; 
     byte[] d = new byte[8]; 
     while((b = fis.read(d)) != -1) { 
      cos.write(d, 0, b); 
     } 

     cos.flush(); 
     cos.close(); 
     fis.close(); 


    } 



    static void decrypt(File file, String pass) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 

      FileInputStream fis = new FileInputStream(file); 

      FileOutputStream fos = new FileOutputStream(APPPATH+"/D_"+file.getName()); 
      SecretKeySpec sks = new SecretKeySpec(pass.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(); 
     } 
+0

おかげでミハル。それは今働きます! :-) –

関連する問題