0

私は Android アプリケーションを作成していますが、ユーザーがフォルダーを開けないようにしたいと考えています。そのフォルダに、ユーザーは画像またはビデオ ファイルを保存できます。そのフォルダをパスワードで保護できれば最高です。

それを行う最良の方法はどれですか?

4

3 に答える 3

5

これは、Sdcardフォルダー内のファイルを暗号化および復号化するための両方の機能です。フォルダをロックすることはできませんが、Android で AES を使用してファイルを暗号化することはできます。

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

    // Length is 16 byte
    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();
}

static void decrypt() throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
    FileInputStream fis = new FileInputStream("data/encrypted");

    FileOutputStream fos = new FileOutputStream("data/decrypted");
    SecretKeySpec sks = new SecretKeySpec("MyDifficultPassw".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();
}
于 2013-03-22T11:53:36.427 に答える
2

この情報は内部ストレージに保存する必要があります。通常、他のアプリはこれらのファイルにアクセスできません。丁寧さ より:

デバイスの内部ストレージにファイルを直接保存できます。デフォルトでは、内部ストレージに保存されたファイルはアプリケーション専用であり、他のアプリケーションはそれらにアクセスできません (ユーザーもアクセスできません)。ユーザーがアプリケーションをアンインストールすると、これらのファイルは削除されます。

リンクを参照してください: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

于 2013-03-22T11:45:07.660 に答える
1

LOCKの代わりに、フォルダ名の.ようなフォルダを作成することをお勧めします->.test

ユーザーはここのフォルダーがコードであることを確認できません

File direct = new File(Environment.getExternalStorageDirectory() + "/.test");

   if(!direct.exists())
    {
        if(direct.mkdir()) 
          {
           //directory is created;
          }

    }

上記のコードは、「.test」という名前のフォルダーを作成し(SDカードに)、ユーザーがアクセスできないこのフォルダーにデータ(ファイル、ビデオなど)を保存します。

内部ストレージにフォルダーを作成した場合、ユーザーがアプリのデータを消去すると、そのフォルダーは削除される可能性がありますEMPTY

于 2013-03-22T11:47:19.127 に答える