J'ai essayé de chiffrer des fichiers et de les réécrire au même endroit. Mais j'ai eu le message d'erreur disant "Java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)".
Mon fichier Manifest
est-ce
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.tdk.mytestapplication2">
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
Android:allowBackup="true"
Je pense que j'ai fourni la permission correcte là-bas. Et le code que j'utilise pour chiffrer les fichiers est le suivant.
public static void encrypt(SecretKey secretKey, String filePath){
try {
// Here you read the cleartext.
FileInputStream fis = new FileInputStream(filePath);
// This stream write the encrypted text. This stream will be wrapped by another stream.
FileOutputStream fos = new FileOutputStream(filePath);
// Create cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 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();
}catch(IOException e){
e.printStackTrace();
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
}catch(NoSuchPaddingException e){
e.printStackTrace();
}catch(InvalidKeyException e){
e.printStackTrace();
}
}
Et j'ai utilisé cette méthode à l'intérieur d'un bouton
Button btnEncrypt = (Button) findViewById(R.id.btnEnc);
btnEncrypt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
aesKey = EncAndDec.generateKey();
String filePath = editText.getText().toString();
//Generating the file hash
String md5Hash = MD5Hash.getMD5(filePath);
System.out.println(aesKey.toString());
System.out.println(filePath);
System.out.println(md5Hash);
//Encrypting the file
for(int i=1; i<100; i++) {
EncAndDec.encrypt(aesKey, filePath);
}
}
});
Je ne pouvais toujours pas configurer cette erreur. S'il vous plaît quelqu'un aide!
Je suppose que vous utilisez Android 6.0 Marshmallow (API 23) ou une version ultérieure. Si tel est le cas, vous devez implémentez autorisations d'exécution avant d'essayer de lire/écrire du stockage externe.
Implémentez l'autorisation d'exécution pour exécuter votre application sur Android 6.0 Marshmallow (API 23) ou ultérieure.
ou vous pouvez activer manuellement la permission de stockage
allez dans paramètres> applications> "votre_nom_app"> cliquez dessus> puis cliquez sur autorisations> puis activez le stockage. C'est ça.
Mais je suggère d’aller dans le premier qui est, Implémentez les autorisations d’exécution dans votre code.