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!
6 Réponses :
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.
Pourquoi utiliser ArrayList. Utilisez simplement un StringBuffer et conservez le contenu complet du fichier dans une seule chaîne.
Fusionner toutes les chaînes en un seul sur Like
anyName.getBytes();
et appeler ensuite ceci
String anyName = allstring;
cela vous aidera. p >
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();
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.
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 >