2016-10-18 19 views
-1

私はアンドロイドの新機能ですので、ファイルの暗号化と解読に助けが必要で、解読後にアンドロイドデバイスに表示したいと考えています。ここでandroidのpdf、docファイルを暗号化して解読する方法

私は、URLからファイルをダウンロードし、SDカードに保存し、私はファイルを暗号化してから、SDカードに保存し、ファイルサイズがかもしれする方法を今いけないのですもっとして20メガバイト

コード: -

ここで私はアンドロイドデバイスにファイルを表示していますが、復号化ファイルの後に表示方法を教えてください。

コード: -

File pdfFile = new File(Environment.getExternalStorageDirectory() + "/SampleFolder/" + "Sample."pref.getString(Constants.PrefConstants.PATH_NAME)); 
      File f = new File(pdfFile.toString()); 
      if(f.exists()) { 
        Uri path = Uri.fromFile(pdfFile); 
        Intent pdfIntent = new Intent(Intent.ACTION_VIEW); 
        pdfIntent.setDataAndType(path, pref.getString(Constants.PrefConstants.PATH_NAME_APP)); 
        //pdfIntent.setFlags(Intent. FLAG_ACTIVITY_CLEAR_TOP); 
        pdfIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
        startActivity(pdfIntent); 
       } else { 
        //uiManager.execute(Constants.Commands.REQGET_INSTRUCTIONS_SCREEN,null); 
        ToastManager.toast(getApplicationContext(), "No data available..."); 
       } 

これらの問題を解決する方法を私を助けてください。事前に

ありがとうございますが、SecretKeySpecライブラリを使用する必要が 乾杯

+3

[Androidでのファイルの暗号化と復号化の方法は?](http://stackoverflow.com/questions/4275311/how-to-encrypt-and-decrypt-file-in-android ) –

答えて

-1

。 暗号化方法の例

static void encrypt() throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 
    // Here you read the cleartext. 
    FileInputStream fis = new FileInputStream("SampleFolder/yourfilename"); 
    // This stream write the encrypted text. This stream will be wrapped by another stream. 
    FileOutputStream fos = new FileOutputStream("SampleFolder/yourencryptedfilename"); 

    // Length is 16 byte 
    // Careful when taking user input!!! https://stackoverflow.com/a/3452620/1188357 
    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(); 
} 

解読方法については、以下のリンクを参照してください。 詳細:How to encrypt file from SD card using AES in Android?

+0

一般的なアドバイス:**常に完全修飾されたCipher文字列を使用してください。** 'Cipher.getInstance(" AES ");'は、デフォルトのセキュリティプロバイダに応じて異なる暗号になることがあります。おそらく '' AES/ECB/PKCS5Padding ''という結果になるでしょうが、必ずしもそうである必要はありません。変更すると、異なるJVM間の互換性が失われます。参考:[JavaデフォルトのCrypto/AES動作](http://stackoverflow.com/q/6258047/1816580) –

+0

** [ECBモード]を使用しないでください(http://crypto.stackexchange.com/q/14487/ 13022)**。それは決定論的であり、したがって意味的に安全ではありません。少なくとも、[CBC](http://crypto.stackexchange.com/q/22260/13022)や[CTR](http://crypto.stackexchange.com/a/2378/)のようなランダム化モードを使用する必要があります13022)。 [パディング・オラクル攻撃](http://crypto.stackexchange.com/q/18185/13022)のような攻撃が不可能になるように、あなたの暗号文を認証する方が良いです。これは、GCMやEAXなどの認証モードや[暗号化MAC](http://crypto.stackexchange.com/q/202/13022)スキームで行うことができます。 –

+0

他の回答からコードをコピーするのは怖いです。これが重複していると思われる場合は、重複して質問する必要があります。 –

関連する問題