2017-05-20 2 views
1

Ich verstehe nicht, warum java.lang.String nicht in Byte [] konvertiert werden kann.Java Compiler denkt Byte [] ist String

Auf der Linie:

byte[] decData = io.decrypt(fileData, new Random(fileData.length)); 

mein Compiler sagte: java.lang.String kann nicht []

in Byte umgewandelt werden, aber ich initialisieren filedata wie folgt aus:

byte[] fileData = new byte[fIn.available()]; 

Und io.decrypt wird wie folgt definiert:

public static String decrypt(byte[] data, Random key) { 
    byte[] byteKey = new byte[data.length]; 
    key.nextBytes(byteKey); 
    return decrypt(data, byteKey); 
} 

Mit zufällig sein java.util.Random

So verstehe ich nicht, warum ich falsch gemacht habe.

Btw: Ich versuche

einen einfachen XOR-de/de-crypter zu machen, und dies ist der vollständige Code:

Boolean decrypt = praseBoolean(Greenfoot.ask("decrypt? (y/n)")); 

    //Random rand = new Random(); 

    if(!decrypt) { 
     File folder = new File("decrypted"); 
     File[] toEncrypt = folder.listFiles(); 
     //Long[] keys = 
     for(File file: toEncrypt) { 
      FileInputStream fIn = new FileInputStream(file); 
      byte[] fileData = new byte[fIn.available()]; 
      fIn.read(fileData); 
      byte[] encData = io.encrypt(fileData, new Random(fileData.length)); 
      io.saveEncryptedFile(encData, "encrypted/"+file.getName()); 
     } 
    } 

    if(decrypt) { 
     File folder = new File("encrypted"); 
     File[] toEncrypt = folder.listFiles(); 
     //Long[] keys = 
     for(File file: toEncrypt) { 
      FileInputStream fIn = new FileInputStream(file); 
      byte[] fileData = new byte[fIn.available()]; 
      fIn.read(fileData); 
      byte[] decData = io.decrypt(fileData, new Random(fileData.length)); 
      io.saveEncryptedFile(encData, "decrypted/"+file.getName()); 
     } 
    } 
+1

Warum versuchen Sie eine 'String' in ein' byte [] 'zu speichern? Überprüfen Sie Ihre Entschlüsselungstyp ... – Li357

+1

Ich habe gerade vergessen. Mein Compiler ist nicht so gut und wählte die Argumente, so dass ich diese verwirrt ansah. – fejfo

+0

Beachten Sie, dass ein 'String' nicht (logisch) ein' byte [] 'ist: es ist mehr wie ein' char [] '. Zeichen und Bytes sind nicht dasselbe. –

Antwort

2

io.decrypt kehrt String, aber Sie das Ergebnis ein byte[] zuweisen . So ist es

ändern
byte[] decData = io.decrypt(fileData, new Random(fileData.length)).getBytes(); 

oder

String decData = io.decrypt(fileData, new Random(fileData.length)); 
+0

danke, ich sah, dass ich mich jetzt dumm fühle – fejfo

1

decrypt gibt ein String, aber Sie versuchen, es zu byte[] decData zuzuweisen. assing es nur zu einem String, und Sie sollten in Ordnung sein:

String decData = io.decrypt(fileData, new Random(fileData.length)); 
+0

danke, ich sah, dass ich mich jetzt dumm fühle – fejfo

1

Ihre decrypt-Methode eine String zurückgibt. Wenn Sie ein Byte-Array davon erhalten möchten, verwenden Sie string.getBytes() für das Ergebnis Ihrer Methode oder geben Sie zuerst ein Byte-Array zurück.

+0

danke, ich sah, dass ich mich jetzt dumm fühle – fejfo

Verwandte Themen