2015-12-14 86 views
2

我正在嘗試做一些非常簡單的事情。我使用AxCrypt在Windows中加密了一個文件。在我的Android應用程序中,我想解密這個文件。使用預先存在的AES密鑰解密Java文件

由AxCrypt產生的128位AES密鑰是

CWTr 45Qg eHhy n23d YPC3 DjRi IxUe bt77 TVzQ NtSh HEc= 

我這個假設Base64編碼字符串,但也許我錯了。我用空格將它插入到下面的代碼中,但我也試過沒有空格,並得到相同的結果。

解密文件的java代碼如下。解密過程開始,但是「解密中最後一個塊不完整」的錯誤以及生成的文件(mp4視頻)無法播放。

Java代碼:

 try { 
      Utils.logDebug(TAG, "Decrypting!"); 
      File encfile = new File(getFilesDir() + "/encrypted.axx"); 
      int read; 
      if (!encfile.exists()) 
       encfile.createNewFile(); 
      File decfile = new File(getFilesDir() + "/decrypted.mp4"); 
      if (!decfile.exists()) 
       decfile.createNewFile(); 
      FileInputStream encfis = new FileInputStream(encfile); 
      FileOutputStream decfos = new FileOutputStream(decfile); 
      Cipher decipher = Cipher.getInstance("AES"); 
      byte key[] = Base64.decode("CWTr 45Qg eHhy n23d YPC3 DjRi IxUe bt77 TVzQ NtSh HEc=", Base64.DEFAULT); 
      SecretKey skey = new SecretKeySpec(key, 0, key.length, "AES"); 
      decipher.init(Cipher.DECRYPT_MODE, skey); 
      CipherOutputStream cos = new CipherOutputStream(decfos, decipher); 
      while ((read = encfis.read()) != -1) { 
       cos.write(read); 
       cos.flush(); 
      } 
      cos.close(); 
      Utils.logDebug(TAG, "Done decrypting!"); 
     } catch (Exception e) { 
      Utils.logError(TAG, "TESTING error: " + e.getMessage()); 
     } 

回答

1

AxCrypt加密在CBC模式中,以及壓縮,MAC和其他一些細節。要解密這個,你需要在這裏查看http://www.axantum.com/AxCrypt/faq.html及其公佈的源代碼。

http://www.axantum.com/AxCrypt/SourceCode.html

+0

這是否意味着它產生的關鍵不是我認爲它是什麼?我沒有使用密碼功能,我首先專門創建了一個密鑰,並使用它。這樣就不會有密碼等哈希值。 – Flyview

+0

@Flyview這意味着文件格式,加密模式和其他細節與您所假設的完全不同,請檢查提供的文檔。事實上,涉及到很多'等等'。 – pvg

+0

謝謝,這很有趣。我對整個加密過程很陌生。我沒有設置任何方式使用AxCrypt。你有什麼建議可以用來加密Windows中的文件,並且更容易在Java中解密它們嗎?如果這是不可能的,我想我也可以在Java中進行加密。 – Flyview