2
votes

Convertir ArrayList en octet []

Je veux pouvoir convertir une ArrayList qui stocke le contenu d'un fichier lu à partir d'un BufferedReader, puis convertir le contenu en un octet [] pour lui permettre d'être chiffré en utilisant Classe de chiffrement de Java.

J'ai essayé d'utiliser .getBytes () mais cela ne fonctionne pas car je pense que je dois d'abord convertir ArrayList, et j'ai du mal à trouver comment faire cela.

Code:

// File variable
private static String file;

// From main()
file = args[2];

private static void sendData(SecretKey desedeKey, DataOutputStream dos) throws Exception {
        ArrayList<String> fileString = new ArrayList<String>();
        String line;
        String userFile = file + ".txt";

        BufferedReader in = new BufferedReader(new FileReader(userFile));
        while ((line = in.readLine()) != null) {
            fileString.add(line.getBytes()); //error here
        }

        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, desedeKey);
        byte[] output = cipher.doFinal(fileString.getBytes("UTF-8")); //error here
        dos.writeInt(output.length);
        dos.write(output);
        System.out.println("Encrypted Data: " + Arrays.toString(output));
    }

Merci d'avance!


0 commentaires

6 Réponses :


0
votes

Donc, la ArrayList complète est en fait une seule String ?

Une approche simple serait de fusionner toutes les Strings qu'il contient en une seule et d'appeler le .getBytes () dessus.


0 commentaires

0
votes

Pourquoi utiliser ArrayList. Utilisez simplement un StringBuffer et conservez le contenu complet du fichier dans une seule chaîne.


0 commentaires

-3
votes

Fusionner toutes les chaînes en un seul sur Like

anyName.getBytes();

et appeler ensuite ceci

String anyName = allstring;

cela vous aidera. p >


0 commentaires

6
votes

Soit concaténer les chaînes, soit créer un StringBuffer.

StringBuffer buffer = new StringBuffer();
String line;
String userFile = file + ".txt";

BufferedReader in = new BufferedReader(new FileReader(userFile));
while ((line = in.readLine()) != null) {
   buffer.append(line); //error here
}

byte[] bytes = buffer.toString().getBytes();


0 commentaires

-3
votes

Vous pouvez essayer de tirer parti de la fonctionnalité de sérialisation de Java et d'utiliser un ObjectOutputStream enroulé autour d'un ByteOutputStream:

try (ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout)) {
  out.writeObject(list);
  out.flush();

  byte[] data = bout.toByteArray();
} catch (IOException e) {
  // Do something with the exception
}

L'inconvénient de cette approche est que le contenu du tableau d'octets sera lié à la forme sérialisée de l'implémentation de la liste, donc la relire dans une liste peut donner des résultats étranges dans les versions Java ultérieures.


0 commentaires

6
votes

Pourquoi voudriez-vous le lire sous forme de chaîne et le convertir en tableau d'octets? Depuis Java 7, vous pouvez faire:

byte[] output = cipher.doFinal(input);

puis transmettre ce contenu au chiffrement.

byte[] input= Files.readAllBytes(new File(userFile.toPath());

Vous pouvez également envisager d'utiliser des flux (InputStream et CipherOutputStream) au lieu de charger le fichier entier dans la mémoire au cas où vous auriez besoin de gérer de gros fichiers.

p >


0 commentaires